uva1160 易爆物】的更多相关文章

#include<iostream>#include<cstdio>#include<algorithm>#include<cstdlib>using namespace std; int f[100005],x[100005],y[100005]; int find(int x) { return f[x]==x ? x : f[x]=find(f[x]); } int main() { int sum,n; scanf("%d",&a…
部分内容摘自博客http://blog.csdn.net/u012881011/article/details/46883863,感谢 易爆物D305             运行时间限制:1000ms: 运行空间限制:51200KB: 试题描述 有一些简单化合物,每个化合物部由两种元素组成的(每个元素用一个大写字母表示).你是一个装箱工人,从实验员那里按照顺序依次把一些简单化合物装到车上.但这里存在一个安全隐患:如果车上存在k个简单化合物,正好包含k种元素,那么它们将组成一个易爆的混合物.为了…
题目链接: https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1645 题意:有一些化合物,每种化合物中含有两种元素,如果有k种化合物含有K种元素就会爆炸,现在装车司机按照输入顺序一件一件的装,遇到加入后会爆炸的化合物就不装,问会有多少化合物不能被装入. 解法:将每种元素看成一个顶点,一个化合物含有两种元素就是一条边,构图完成后…
分析:典型的并查集,每一个物品合一看成一个独立的顶点,则一个简单化合物就是一条边,如果两个顶点x,y联通则说明有危险,所以可以用一个并查集来维护图的联通分量集合,并查集的详解有一篇写的很易懂的博客并查集详解,看完之后觉得别具一格,推荐给正在学习并查集的ACER们. 并查集主要是由保存上级的数组pre[],Find()函数,Join()函数进行实现,Find函数是用来查找元素的根节点,join函数用来连接两个节点,将联通分量合并为一个. 而在此题中,只需要使用Find函数查找两个元素x,y是否在同…
思路 每个元素设为点,化合物设为边 不能出现k条边k个点的环 直接并查集检查即可 代码 #include <cstdio> #include <algorithm> #include <cstring> using namespace std; int fa[100100],ans=0,a,b; void init(void){ ans=0; for(int i=1;i<=100010;i++) fa[i]=i; } int find(int x){ return…
https://vjudge.net/problem/UVALive-3644 简单的并查集题目. #include<iostream> using namespace std; + ; int p[maxn]; int find(int x) { return p[x] != x ? p[x] = (find(p[x])) : x; } int main() { //freopen("D:\\txt.txt", "r", stdin); int x,…
#include <iostream> #include <algorithm> using namespace std; + ; int fa[maxn]; int Find(int x){ if (x == fa[x]) return x; else return fa[x] = Find(fa[x]); } int main(){ int a, b; while (cin >> a){ //init ; i < maxn; i++) fa[i] = i; ;…