uva 1160
来源:互联网 发布:马基雅维利主义知乎 编辑:程序博客网 时间:2024/04/29 00:21
此题意思大概就是使得给出化合物来装运,但得保证n个化合物中刚好有n种元素,那么我们以每个元素为一个结点,装上车化合物即会连边成图,这样以来就能想到为避免爆炸就不应该出现环的情况,因为在无环图中,n个点也就只有n-1条边,每条边代表一个化合物,那么有环的时候就刚好是n个点n个化合物了,这便是把实际问题抽象出图论模型,这样以来问题就变成检验是否有环和无环的问题了。
对于检验是否存在环,笨一点的办法就是进行dfs或者bfs每次装载前检测是否存在环,但这样并不高效,因为我们并不关心图的具体情况怎样的,我们只想知道两个节点间是否存在一个环,并查集就刚好能达到这个效果,如果插入的化合物两个元素已然在同一个集合中,那么便存在环,这样以来问题就简便多了。
#include<stdio.h>#include<stdlib.h>#define maxn 100000+5int p[maxn];int find(int x){ return (p[x] != x ) ? p[x] = find(p[x]):x; //找到每个点的父亲并进行状态压缩 }int main(){ int a,b,sum; while(scanf("%d",&a)==1){ for(int i=0;i<maxn;i++)p[i]=i;//并查集的首要初始化,每个节点的父亲开始都是他自己 sum=0;//统计拒绝物品数 while(a!=-1){ scanf("%d",&b); a=find(a),b=find(b); if(a!=b)//父亲不一样 p[a]=b;//归并成一个集合 else sum++; scanf("%d",&a); } printf("%d\n",sum); } return 0;}
- uva 1160
- Uva-1160-X-Plosives
- UVA 1160 X-Plosives
- UVA 1160 X-Plosives
- uva 1160 X-Plosives
- uva 1160 X-Plosives
- UVA 1160 X-Plosives
- UVA 1160 X-Plosives
- UVa 1160 X-Plosives
- UVA 1160 X-Plosives
- UVa 1160 - X-Plosives
- uva 1160 x plosives
- UVa 1160 - X-Plosives
- UVA 1160 X-Plosives
- uva
- UVA
- UVA
- UVA
- 基于ubuntu12.04 的OpenStack E版本多节点部署(及多节点部署nova-volume)
- 常用批处理
- 从零开始学GO语言(2)——赋值
- Oracle存储过程及参数理解
- 书单
- uva 1160
- 计划任务与批处理结合定时启动屏保
- nginx启动后Localhost打开指定目录文件
- 正则表达式全部符号解释
- 各种浏览器的userAgent(VS获取)
- Android实现图片滚动控件,含页签功能,让你的应用像淘宝一样炫起来
- Win7下Ant的安装与配置
- 修改tinyxml让其支持解析特殊字符
- Java - 反射