LA 3644 - X-Plosives,并查集

我擦,题目描述的太。。。

思路:用一个并查集来维护图的连通分量集合,每次得到一个简单化合物(x,y)时检查x和y是否在同一个集合中。如果是,则拒绝,反之则接受。

#include <stdio.h>
const int maxn = 100000 + 10;
int pa[maxn];
int find(int x){return pa[x] != x ? pa[x] = find(pa[x]) : x;}

int main()
{
    int x, y;
    while(scanf("%d", &x) == 1){
        for (int i=0; i<=maxn; i++) pa[i] = i;
        int refusals = 0;
        while(x != -1){
            scanf("%d", &y);
            x = find(x); y = find(y);
            if (x == y) ++refusals;//如果 x和y代表同一个集合,则拒绝
            else pa[x] = y;
            scanf("%d", &x);
        }
        printf("%d\n", refusals);
    }
    return 0;
}


你可能感兴趣的:(并查集,la,-X-Plosives,3644)