LA 3027(并查集)

2018-05-05  本文已影响0人  laochonger
LA 3027(并查集)
LA 3027(并查集)

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;
}
上一篇 下一篇

猜你喜欢

热点阅读