X-Plosives(LA 3644)并查集
来源:互联网 发布:淘宝蹭淘气值评价 编辑:程序博客网 时间:2024/05/09 08:47
来自《算法竞赛入门经典训练指南》
1.题目原文
https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1645
有一些简单化合物,每个化合物有两种元素组成。你是一个装箱工人,负责把化合物装上车,如果车上存在k个简单化合物,正好包含k个元素,会发生爆炸。为了安全起见,每拿到一个化合物,如果它与已装车的化合物形成易爆炸化合物,不应该把它装上车,否则装上车。输出有多少个没有装上车的化合物。
2.解题思路
把每种元素看成顶点,则一个简单化合物对应一条边,当整个图中存在环时,组成环的边对应的化合物是危险的,反之是安全的。
可以利用并查集,高效检查每个化合物的组成元素x和y是否在一个集合中。如果是,则拒绝。反之则接受。
3.AC代码
#include <algorithm>#include <cctype>#include <cmath>#include <cstdio>#include <cstdlib>#include <cstring>#include <iomanip>#include <iostream>#include <map>#include <queue>#include <string>#include <set>#include <vector>#include<cmath>#include<bitset>#include<sstream>using namespace std;#define INF 0x7fffffff#define maxn 100005int par[maxn];//父亲int Rank[maxn];//树的高度//初始化void init(int n){ for(int i=0;i<n;i++){ par[i]=-1; Rank[i]=0; }}//查询父亲,路径压缩int Find(int x){ int s; for(s=x;par[s]!=-1;s=par[s]); while(s!=x){ int temp=par[x]; par[x]=s; x=temp; } return s;}//合并x,y属于的集合void unite(int x,int y){ x=Find(x);y=Find(y); if(x==y) return; if(Rank[x]<Rank[y]){ par[x]=y; } else{ par[y]=x; if(Rank[x]==Rank[y]) Rank[x]++; }}bool same(int x,int y){ return Find(x)==Find(y);}int main(){ int x,y; while(scanf("%d",&x)==1){ init(maxn); int res=0; while(x!=-1){ scanf("%d",&y); if(same(x,y)) res++; else unite(x,y); scanf("%d",&x); } printf("%d\n",res); } return 0;}
0 0
- LA 3644 - X-Plosives,并查集
- LA 3644 X-Plosives / 并查集
- LA -3644 X-Plosives -并查集
- LA 3644 X-Plosives 并查集
- LA 3644 X-Plosives [并查集]
- X-Plosives(LA 3644)并查集
- LA 3644 X-Plosives [并查集]
- X-Plosives问题, LA 3644, 并查集算法
- UVALive(LA) 3644 X-Plosives (并查集)
- LA 3644 X-Plosives && LA 3027 Corporative Network (并查集入门)
- (DS 《算法竞赛入门经典》)LA 3644 X-Plosives(并查集)
- 初学并查集的例题1 X-Plosives,LA 3644
- UVALive 3644 X-Plosives 并查集
- UVALive - 3644 X-Plosives 并查集
- UVALive - 3644 X-Plosives 并查集
- LA - 3644 - X-Plosives
- LA 3644 X-Plosives
- LA 3644 X-Plosives
- 数据合并小技巧
- VS2015,UNICODE字符集下printf,cout打印CString,与TRACE输出中文调试
- MAC 下如何显示隐藏文件
- 1619-7 张良 十月四号总结 [连续第四天]
- 详解Linux中CentOS6.8下解压安装mysql-5.7.14
- X-Plosives(LA 3644)并查集
- linux-java环境搭建
- java中的接口为什么可以多继承,而其他类则不能实现多继承
- 51nod-1670 打怪兽
- 计算机网络常见面试题总结
- 关于STL中vector使用unique()去重的问题
- 文章标题
- Set Up Ninject and Moq In A MVC 5 Prjoect
- vc++包管理工具