题号:NC20282
                        时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
            空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
             64bit IO Format: %lld
        
     
    题目描述
        
        
    
            
              有N个节点,标号从1到N,这N个节点一开始相互不连通。第i个节点的初始权值为a[i],接下来有如下一些操作: 
   U x y: 加一条边,连接第x个节点和第y个节点 
   A1 x v: 将第x个节点的权值增加v 
   A2 x v: 将第x个节点所在的连通块的所有节点的权值都增加v 
   A3 v: 将所有节点的权值都增加v 
   F1 x: 输出第x个节点当前的权值 
   F2 x: 输出第x个节点所在的连通块中,权值最大的节点的权值 
   F3: 输出所有节点中,权值最大的节点的权值 
输入描述:
                                                    输入的第一行是一个整数N,代表节点个数。
接下来一行输入N个整数,a[1], a[2], …, a[N],代表N个节点的初始权值。
再下一行输入一个整数Q,代表接下来的操作数。
最后输入Q行,每行的格式如题目描述所示
                                                                            输出描述:
                                                    对于操作F1, F2, F3,输出对应的结果,每个结果占一行。
                                                                            
                        
                            示例1
                        
                        
                            
                                输入
                                复制
                                
                                
                                    3
0 0 0
8
A1 3 -20
A1 2 20
U 1 3
A2 1 10
F1 3
F2 3
A3 -10
F3
                                 
                             
                            
                                                     
                     
                                                        备注:
                对于30%的数据,保证
对于80%的数据,保证 
对于100%的数据,保证 
对于所有的数据,保证输入合法,并且 