hdu-1232-畅通工程
来源:互联网 发布:淘宝信誉度怎么看 编辑:程序博客网 时间:2024/06/06 00:55
畅通工程
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 30473 Accepted Submission(s): 16006
Problem Description
某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇。省政府“畅通工程”的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要互相间接通过道路可达即可)。问最少还需要建设多少条道路?
Input
测试输入包含若干测试用例。每个测试用例的第1行给出两个正整数,分别是城镇数目N ( < 1000 )和道路数目M;随后的M行对应M条道路,每行给出一对正整数,分别是该条道路直接连通的两个城镇的编号。为简单起见,城镇从1到N编号。
注意:两个城市之间可以有多条道路相通,也就是说
3 3
1 2
1 2
2 1
这种输入也是合法的
当N为0时,输入结束,该用例不被处理。
注意:两个城市之间可以有多条道路相通,也就是说
3 3
1 2
1 2
2 1
这种输入也是合法的
当N为0时,输入结束,该用例不被处理。
Output
对每个测试用例,在1行里输出最少还需要建设的道路数目。
Sample Input
4 21 34 33 31 21 32 35 21 23 5999 00
Sample Output
102998代码:#include<stdio.h>int p[1000]; // 父节点数组 int find(int x){ return p[x]==x?x:p[x]=find(p[x]); //压缩路径 }int main(){ int n,m,i,a,b; while(~scanf("%d",&n)&&n) { for(i=1;i<=n;++i) p[i]=i; scanf("%d",&m); for(i=1;i<=m;++i) { scanf("%d%d",&a,&b); if(find(a)!=find(b)) { if(a<b) p[find(b)]=find(p[a]); //把a的父节点赋给b的父节点,使二者祖先相同 !!!!!!!!!!! else p[find(a)]=find(p[b]); } } int k=0; for(i=1;i<=n;++i) if(p[i]==i) { k++;//printf("%d ",i); } printf("%d\n",k-1); } return 0;}
0 0
- Hdu-1232 畅通工程
- hdu 1232 畅通工程
- hdu 1232 畅通工程
- hdu 1232 畅通工程
- HDU 1232 畅通工程
- hdu 1232 畅通工程
- hdu 1232 畅通工程
- hdu 1232 畅通工程
- hdu 1232 畅通工程
- Hdu 1232 畅通工程
- HDU-1232:畅通工程
- hdu 1232 畅通工程
- hdu 1232 畅通工程
- hdu - 1232 - 畅通工程
- hdu 1232 畅通工程
- hdu 1232畅通工程
- hdu 1232 畅通工程
- HDU 1232 畅通工程
- 如何根据设备的IP获取其MAC?
- 游戏运营笔记八 策划一个活动
- MATLAB 绘图坐标设定axis
- HDU 1030 Delta-wave
- CSS3的神奇盒子布局
- hdu-1232-畅通工程
- Java 堆内存
- Excel单个单元格多个数值求平均值
- YII启用GII创建项目
- 鼻出血 儿童记忆杀手
- hdoj.2049 不容易系列之(4)——考新郎 20140805
- Ubuntu 12.04禁用触摸板
- 2014.3.29 阿里巴巴 实习校招 笔试 题目及部分参考答案
- copying函数使用中的注意事项