并查集果题
传送门:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=12648
#include <cstdio>
#include <cstring>
#include <stack>
#include <queue>
#include <iostream>
#include <algorithm>
#include <map>
#include <vector>
using namespace std;
int bin[100005];
int cnt;
int findx(int x) {
if(bin[x] != x) {
bin[x] = findx(bin[x]);
}
return bin[x];
}
void merge(int x,int y){
int fx = findx(x);
int fy = findx(y);
if(fx != fy) {
bin[fx] = fy;
}
else cnt ++;
}
void Deal_with() {
int a1,a2;
while(~scanf("%d",&a1)) {
for(int i = 0 ; i <= 100000 ; i++) {
bin[i] = i;
}
cnt = 0;
while(a1+1) {
scanf("%d",&a2);
merge(a1,a2);
scanf("%d",&a1);
}
printf("%d\n",cnt);
}
}
int main(void) {
//freopen("a.in","r",stdin);
Deal_with();
return 0;
}
本文介绍了一种使用并查集解决特定类型问题的算法实现。通过一个实例问题,详细展示了并查集的数据结构定义、查找与合并操作的具体实现方式,并提供了完整的C++代码示例。
537

被折叠的 条评论
为什么被折叠?



