您的位置:首页 > 理论基础 > 数据结构算法

【暑假】[实用数据结构]UVAlive 3644 X-Plosives

2016-03-30 17:19 453 查看
UVAlive X-Plosives

思路:

“如果车上存在k个简单化合物,正好包含k种元素,那么他们将组成一个易爆的混合物” 如果将(a,b)看作一条边那么题意就是不能出现环,很容易联想到Kruskal算法中并查集的判环功能(新加入的边必须属于不同的两个集合否则出现环),因此本题可以用并查集实现。模拟装车过程即可。

代码:

1 #include<cstdio>
2 #include<cstring>
3 #define FOR(a,b,c) for(int a=(b);a<(c);a++)
4 using namespace std;
5 const int maxn= 100000 +10;
6
7 int p[maxn];
8 int find_set(int u){ //寻找root+路径压缩
9     return u==p[u]? u : p[u]=find_set(p[u]);
10 }
11 int main(){
12 int x,y,refusal;
13   while(scanf("%d",&x)==1){
14       refusal=0;   //直接用变量统计
15       FOR(i,0,maxn) p[i]=i;
16       while(x != -1){
17           scanf("%d",&y);
18           int xr=find_set(x),yr=find_set(y);
19           if(xr == yr) refusal ++;
20           else p[xr]=yr;
21           scanf("%d",&x);
22       }
23       printf("%d\n",refusal);
24   }
25   return 0;
26 }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: