UVa 1160 - X-Plosives
2015-11-26 10:03
459 查看
題目:有n個由兩種元素組成的化合物要裝車,如果其中能取出一個子集元素的個數等於化合物的個數,則危險;
現在依次將化合物裝車,遇到危險就放棄(這個化合物不裝車),問有多少元素不裝車。
分析:模擬,圖論,并查集。按照題目順序模擬裝車順序。
如果把每個化合物看成一條邊,每種元素看成一個節點,那麼問題就是判斷環;
如果并查集檢查到來個元素屬於同一個集合,則這條邊的加入就會產生一個環。
說明:╮(╯▽╰)╭。
現在依次將化合物裝車,遇到危險就放棄(這個化合物不裝車),問有多少元素不裝車。
分析:模擬,圖論,并查集。按照題目順序模擬裝車順序。
如果把每個化合物看成一條邊,每種元素看成一個節點,那麼問題就是判斷環;
如果并查集檢查到來個元素屬於同一個集合,則這條邊的加入就會產生一個環。
說明:╮(╯▽╰)╭。
#include <stdio.h> //union_set_begin int sets[100001]; int rank[100001]; void union_set(int l, int r) { for (int i = l; i <= r; ++ i) { rank[i] = 0; sets[i] = i; } } int union_find(int a) { if (a != sets[a]) sets[a] = union_find(sets[a]); return sets[a]; } int union_union(int a, int b) { if (rank[a] > rank[b]) sets[b] = a; else { sets[a] = b; if (rank[a] == rank[b]) rank[b] ++; } } //union_set_end int main() { int a, b; while (~scanf("%d",&a)) { int count = 0; union_set(0, 100000); while (a != -1) { scanf("%d",&b); a = union_find(a); b = union_find(b); if (a == b) count ++; else union_union(a, b); scanf("%d",&a); } printf("%d\n",count); } return 0; }
相关文章推荐
- 如何设置css3中placeholder的字体颜色
- Windows Server 2008 R2 实现多用户连接远程桌面
- eclipse报错:发现了以元素 'd:skin' 开头的无效内容。此处不应含有子元素
- 车型数据查询api文档数据调用代码
- The method of type must override a superclass method解决方式
- Android小记:提升 Android 性能的建议
- android studio 快捷键!!!
- 网站压力测试webbeach的安装使用
- docker 使用 iso虚拟光驱一键式安装
- Linux上安装SVN Server 服务器的方法
- 使用awk+sort+uniq进行文本分析
- 第二节 BLE快速体验
- hadoop存储测试
- Java并发编程:线程池的使用
- CentOS下安装配置LAMP(Linux+Apache+MySQL+PHP)
- 玩转Highcharts图表库系列(二) 沿X轴设置不同的背景色分辨带
- 增加远程登录用户登陆个数
- Spring REST for DELETE Request Method Not Supoorted
- Android Fragment 真正的完全解析(上)
- 网站日志分析