UVALive 3644 X-Plosives(简单并查集)
2016-11-27 15:50
405 查看
题目大意:
把一些两个元素组成的化合物按输入次序往车上装,如果会发生爆炸(存在k个简单化合物,正好包含k种元素),记录,输出不能装车的化合物总数。
做法:由于是其中K各简单化合物中包含K个元素,仔细一想就是并查集,把已经出现的点合成一个集合,对于新出现的两个值,如果两个值同时在一个集合中(注意可能不止一个集合),那么在这个集合中就肯定能找到另外几对数值使得他们与这一对数值构成一个环,如现在的为A+B;因为A,B已经在集合中了,所以集合中必然有(A,C),(X,B).而C和X都在集合中,就可以找到一条路径连接C,X;于是在这条路上的所有点就构成了(存在k个简单化合物,正好包含k种元素)。代码如下:
#include<iostream> #include<cstring> #include<algorithm> using namespace std; const int maxx=100050; int father[maxx]; int findfather(int x) { return father[x]==x?x:findfather(father[x]); } void init(){ for(int i=0;i<maxx;i++) father[i]=i; } int main(){ int a,b;int flag=0; init(); while(cin>>a) { if(a==-1){//注意是多组数据 cout<<flag<<endl; flag=0; init(); continue; } cin>>b; int aa=findfather(a); int bb=findfather(b); if(aa==bb)flag++; else father[aa]=bb; } return 0;}
相关文章推荐
- UVALive - 3644 - X-Plosives (并查集!!)
- UVALive 3644 X-Plosives (并查集)
- LA 3644 简单并查集
- LA 3644 - X-Plosives,并查集
- LA 3644 X-Plosives [并查集]
- 指南 第三章 例题5 UVALive 3644 X-Plosives(并查集)
- UVALive - 3644 X-Plosives (并查集)
- LA -3644 X-Plosives -并查集
- LA 3644 X-Plosives && LA 3027 Corporative Network (并查集入门)
- LA 3644 X-Plosives (并查集)
- UVALive(LA) 3644 X-Plosives (并查集)
- UVALive - 3644 X-Plosives 并查集
- UVALive(LA) 3644 X-Plosives (并查集)
- UVALive - 3644 X-Plosives(并查集判断是否有环)
- [LA] 3644 - X-Plosives [并查集]
- uvalive 3644 X-Plosives(并查集)
- (DS 《算法竞赛入门经典》)LA 3644 X-Plosives(并查集)
- 并查集(图论) LA 3644 X-Plosives
- 初学并查集的例题1 X-Plosives,LA 3644
- X-Plosives(LA 3644)并查集