考查对并查集的基础运用
这道题目中把元素看为点,可以构成化合物的两个元素之间建立一条边
这样的话就转变为判断能构成环的个数
代码如下:
#include <cstdio>
#define MAXN 100100
using namespace std;
int p[MAXN];
int findset(int x) {
return p[x]==x ? x : p[x] = findset(p[x]);
}
int main(void) {
int a, b, cnt, i;
while(scanf("%d", &a) != EOF) {
cnt = 0;
for(i=0; i<MAXN; ++i)
p[i] = i;
while(a != -1) {
scanf("%d", &b);
a = findset(a);
b = findset(b);
if(findset(a) == findset(b)) {
cnt++;
} else {
p[b] = a;
}
scanf("%d", &a);
}
printf("%d\n", cnt);
}
return 0;
}