1 #include<bits/stdc++.h> 2 #define MAXN 80001 3 using namespace std; 4 inline int read () 5 9 while ('0'<=ch&&ch<='9') s=(s<<1)+(s<<3)+(ch^48),ch=getchar (); 10 return s*w; 11 } 12 struct edge{ 13 int v,nxt; 14 }e[MAXN<<2]; 15 struct President_Tree{ 16 int l,r,size; 17 }tr[MAXN*500]; 18 int testcase,n,m,t,Max,len,cnt,ans; 19 int head[MAXN],a[MAXN],root[MAXN],fa[MAXN],size[MAXN]; 20 int mi[17],f[MAXN][17],dep[MAXN]; 21 vector<int>Vec; 22 bool used[MAXN]; 23 inline void add (int u,int v) 24 { 25 e[++cnt].v=v,e[cnt].nxt=head[u],head[u]=cnt; 26 } 27 inline int find (int x) 28 32 inline void build (int &x,int l,int r) 33 40 inline void update (int &x,int y,int l,int r,int pos) 41 49 inline void dfs (int u,int ff,int rt) 50 59 inline void merge (int x,int y) 60 66 inline int LCA (int x,int y) 67 79 inline int query (int x,int y,int pre1,int pre2,int l,int r,int k) 80 87 int main() 88 { 89 mi[0]=1;for (register int i=1;i<=16;i++) mi[i]=mi[i-1]<<1; 90 testcase=read (); 91 n=read (),m=read (),t=read (); 92 for (register int i=1;i<=n;i++) fa[i]=i; 93 for (register int i=1;i<=n;i++) a[i]=read (),Vec.push_back (a[i]); 94 sort (Vec.begin (),Vec.end ()); 95 Vec.erase (unique (Vec.begin (),Vec.end ()),Vec.end ()); 96 for (register int i=1;i<=n;i++) 97 a[i]=lower_bound (Vec.begin (),Vec.end (),a[i])-Vec.begin ()+1; 98 Max=Vec.size (); 99 for (register int i=1;i<=m;i++) 100 { 101 int u=read (),v=read (); 102 add (u,v),add (v,u); 103 } 104 build (root[0],1,Max); 105 for (register int i=1;i<=n;i++) 106 if (!used[i]) 107 dfs (i,0,i); 108 while (t--) 109 120 } 121 return 0; 122 }








