并查集
#include<bits/stdc++.h>
using namespace std;
int f[20020],d[20020];
int find(int x)
{
if(f[x]!=x)
{
int root=find(f[x]);
d[x]+=d[f[x]];
f[x]=root;
}
return f[x];
}
int main()
{
int T,N,u,v;
char s[20];
scanf("%d",&T);
for(int kase=1;kase<=T;kase++)
{
scanf("%d",&N);
for(int i=1;i<=N;i++)
{
f[i]=i;
d[i]=0;
}
while(scanf("%s",s)!=EOF&&s[0]!='O')
{
if(s[0]=='I')
{
scanf("%d%d",&u,&v);
f[u]=v;
d[u]=abs(u-v)%1000;
}
else
{
scanf("%d",&u);
find(u);
printf("%d\n",d[u]);
}
}
}
return 0;
}