//带权并查集
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
const int maxn = 20000+10;
int p[maxn];
int d[maxn];
char ch[3];
int findset(int x){
if(p[x]!=x){
int root = findset(p[x]);
d[x]+=d[p[x]];
return p[x]= root;
}
else return x;
}
int main()
{
// freopen("in.txt","r",stdin);
int T,n;
int u,v;
scanf("%d",&T);
while(T--){
scanf("%d",&n);
for(int i=0;i<=n;++i){p[i] = i;d[i] = 0;}
while(~scanf("%s",ch)&&ch[0]!='O'){
if(ch[0]=='E'){
scanf("%d",&u);p[u]=findset(u);printf("%d\n",d[u]);
}
else {
scanf("%d%d",&u,&v);
p[u] = v;
d[u] = int(abs(v-u))%1000;
}
}
}
return 0;
}
UVa 1329 Corporative Network
最新推荐文章于 2022-10-11 17:47:31 发布