LA3644 - X-Plosives(bcj模板)
2017-11-05 21:14
190 查看
题目链接
简介:
有一些简单化合物,每个简单化合物都是由两种元素组成的
身为一个装箱工人,你从实验员那里按照顺序依次把一些化合物装车
但是这里存在一个安全隐患:如果车上存在x个简单化合物,而且正好包含k种元素,就很容易发生爆炸
这时我们就要果断拒绝装车
输出有多少没有装车的化合物
分析:
我们仔细考虑一下,怎样才会出现“x个简单化合物,而且正好包含k种元素”的情况
如果我们把每种元素看做是一个点,那么化合物就是连接两个点的一条边
(这一层的模型转化就够难想的了)
当整个图中存在环的话,组成环的边对应的化合物是危险的
所有边都是按顺序添加的
那么我们怎么判断加入一条边后,图中有没有环呢
形成环的充要条件是:在连接两个点之前,两个点就已经连通
所以说我们只要判断两个点是否连通即可
维护连通性的有力工具就是并查集
因此这道题就完美的转化成了并查集的基本操作
简介:
有一些简单化合物,每个简单化合物都是由两种元素组成的
身为一个装箱工人,你从实验员那里按照顺序依次把一些化合物装车
但是这里存在一个安全隐患:如果车上存在x个简单化合物,而且正好包含k种元素,就很容易发生爆炸
这时我们就要果断拒绝装车
输出有多少没有装车的化合物
分析:
我们仔细考虑一下,怎样才会出现“x个简单化合物,而且正好包含k种元素”的情况
如果我们把每种元素看做是一个点,那么化合物就是连接两个点的一条边
(这一层的模型转化就够难想的了)
当整个图中存在环的话,组成环的边对应的化合物是危险的
所有边都是按顺序添加的
那么我们怎么判断加入一条边后,图中有没有环呢
形成环的充要条件是:在连接两个点之前,两个点就已经连通
所以说我们只要判断两个点是否连通即可
维护连通性的有力工具就是并查集
因此这道题就完美的转化成了并查集的基本操作
tip
很好码的一道题,难点在于模型转化//这里写代码片 #include<cstdio> #include<cstring> #include<iostream> using namespace std; const int N=100000; int fa[N+5]; void unionn(int f1,int f2){fa[f1]=f2;} int find(int x) { if (fa[x]!=x) fa[x]=find(fa[x]); return fa[x]; } int main() { int x,y; while (scanf("%d",&x)!=EOF) { int cnt=0; for (int i=0;i<=N;i++) fa[i]=i; while (x!=-1) { scanf("%d",&y); int f1=find(x); int f2=find(y); if (f1!=f2) unionn(f1,f2); else cnt++; scanf("%d",&x); } printf("%d\n",cnt); } return 0; }
相关文章推荐
- LA3644 X-Plosives(无向图中找环,并查集)
- LA3644:X-Plosives(并查集)
- LA3644 X-Plosives
- UVA 1160 - X-Plosives 即LA3644 并查集判断是否存在环
- 【并查集】LA3644 X-Plosives
- android:如何通过自定义工程模板让新建的工程都默认支持lambda表达式
- [BZOJ 2462 BeiJing2011矩阵模板]矩阵Hash
- JS模板引擎的实现原理
- Spring中模板模式和回调模式的讲解
- Git Commit Template 提交模板
- NSURLSession使用模板和AFNetworking使用模板(REST风格)
- POI, 模板读写和修改, 单元格内换行, 打包成zip
- 【hiho四十八周】 求最后感染到的病毒总数(拓扑排序模板)
- 高斯消元模板
- dedecms网页模板编写介绍
- flex 开发卡片模板处理(三)
- 模板强化Template Method & Singleton 模式
- acm常用模板
- 关于 模板
- ACM常用模板 字典序全排列