【暑假】[实用数据结构]UVAlive 3644 X-Plosives
2016-03-30 17:19
471 查看
UVAlive X-Plosives
思路:
“如果车上存在k个简单化合物,正好包含k种元素,那么他们将组成一个易爆的混合物” 如果将(a,b)看作一条边那么题意就是不能出现环,很容易联想到Kruskal算法中并查集的判环功能(新加入的边必须属于不同的两个集合否则出现环),因此本题可以用并查集实现。模拟装车过程即可。
代码:
思路:
“如果车上存在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 }
相关文章推荐
- 【暑假】[实用数据结构]UVAlive 3027 Corporative Network
- 【暑假】[实用数据结构]UVAlive 4329 Ping pong
- 【暑假】[实用数据结构]UVa11235 Frequent values
- 【暑假】[实用数据结构]前缀树 Trie
- 【暑假】[实用数据结构]KMP
- netmap分析(3)-原理分析之数据结构关系
- Java数据结构——双端链表
- 《数据结构》 栈代码操作集合
- 数据结构(java语言描述)串与数组——文件加解密
- 常见的数据结构和算法
- 【数据结构】链表与实现分析
- 数据结构--Dijkstra算法最清楚的讲解
- 数据结构(树链剖分):BZOJ 4034: [HAOI2015]T2
- Java数据结构——链表-单链表
- 数据结构
- Intellij IDEA快捷键整理
- Java数据结构——解析算术表达式
- 统计文章中单词的字数并按照出现的频率排序(treeSet)
- 数据结构之队列的实现
- 数据结构(五)--最小生成树(普利姆算法、克鲁斯卡尔算法)