

wa了一次,忘记初始化d[i];
对于单个字符的输入,可以使用一整个字符串输入,避免出现读取空格的错误
并查集并不一定需要输出pa数组,关键在于合并与压缩而不在于赋值输出
#include<cstdio>
#include<algorithm>
using namespace std;
int pa[20005];
int d[20005];
int find(int x){
if(pa[x] == x) return x;
else{
int root = find(pa[x]);
d[x] += d[pa[x]];
return pa[x] = root;
}
}
int main(){
int t;
scanf("%d", &t);
while(t--){
int n;
scanf("%d", &n);
for(int i = 1; i <= n ; i++){
pa[i] = i;
d[i] = 0;
}
char c[10];
int a,b;
//getchar();
while(scanf("%s", &c) && c[0]!='O'){
if(c[0] == 'I'){
scanf("%d %d", &a,&b);
pa[a] = b;
d[a] = abs(a-b)%1000;
}else if(c[0] == 'E'){
scanf("%d",&a);
find(a);
printf("%d\n", d[a]);
}
}
}
return 0;
}
网友评论