浙大 2005 畅通工程

题目:
给出城镇数目N ( < 1000 )和道路数目M;以及每条道路直接连通的两个城镇的编号(1到N编号)。输出最少还需要建设的道路数目,使任何两个城镇间都直接或间接连通。

思路:
并查集。通过并查集判断真正起到链接作用,且不重复的路的数量,再求还需要建的路的数量。

代码:

 1 #include <iostream>
 2 #include <stdio.h>
 3 #include <cstring>
 4 using namespace std;
 5
 6 int roadNum;                //符合的路的数量
 7 //并查集
 8 int Tree[1005];
 9 int find(int x){            //查根并压缩树
10     int ret,t;
11     int temp=x;
12     while(Tree[x]!=-1){
13         x=Tree[x];
14     }
15     ret=x;
16     x=temp;
17     while(Tree[x]!=-1){
18         t=Tree[x];
19         Tree[x]=ret;
20         x=t;
21     }
22     return ret;
23 }
24 void connect(int a,int b){  //合并两棵树
25     int ret1=find(a);
26     int ret2=find(b);
27     if(ret1==ret2)                //自己通往自己的和同根的不处理
28         return ;
29     else{
30         Tree[ret2]=ret1;
31         roadNum++;
32         return ;
33     }
34 }
35
36 //主函数
37 int main(){
38     int N,M,i;
39     int m1,m2;
40     while(scanf("%d",&N)!=EOF && N){ //输入N
41         scanf("%d",&M);                    //输入M
42         memset(Tree,-1,1005*sizeof(int));  //初始化变量
43         roadNum=0;
44         for(i=0;i<M;i++){                  //循环输入路
45             scanf("%d %d",&m1,&m2);
46             connect(m1,m2);                      //连接两点的根
47         }
48         printf("%d\n",N-1-roadNum);        //还要再建的路
49     }
50     return 0;
51 }
时间: 2024-08-19 05:13:53

浙大 2005 畅通工程的相关文章

畅通工程(并查集找根节点)

畅通工程 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 203 Accepted Submission(s): 168   Problem Description 某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇.省政府“畅通工程”的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要互相间

HDU_1232《畅通工程》

Problem Description 某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇.省政府"畅通工程"的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要互相间接通过道路可达即可).问最少还需要建设多少条道路? Input 测试输入包含若干测试用例.每个测试用例的第1行给出两个正整数,分别是城镇数目N ( < 1000 )和道路数目M:随后的M行对应M条道路,每行给出一对正整数,分别是该条道路直接连通的两个城镇的编号.为简

(hdu step 6.1.3)畅通工程(求需要添加多少条边才能让n个点连通)

题目: 畅通工程 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 163 Accepted Submission(s): 132   Problem Description 某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇.省政府"畅通工程"的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道

hdu 1875 畅通工程再续(kruskal算法计算最小生成树)

畅通工程再续 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 18411    Accepted Submission(s): 5769 Problem Description 相信大家都听说一个"百岛湖"的地方吧,百岛湖的居民生活在不同的小岛中,当他们想去其他的小岛时都要通过划小船来实现.现在政府决定大力发展百岛湖,发展首先

HDU 1874 畅通工程续

畅通工程续 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 39915    Accepted Submission(s): 14754 Problem Description 某省自从实行了很多年的畅通工程计划后,终于修建了很多路.不过路多了也不好,每次要从一个城镇到另一个城镇时,都有许多种道路方案可以选择,而某些方案要比另一些方案行走

HDU 1233 还是畅通工程

还是畅通工程 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 35208    Accepted Submission(s): 15877 Problem Description 某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离.省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要

hdu 1233 还是畅通工程(kruskal求最小生成树)

还是畅通工程 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 31362    Accepted Submission(s): 14083 Problem Description 某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离.省政府"畅通工程"的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路

hdu1879 继续畅通工程

http://acm.hdu.edu.cn/showproblem.php?pid=1879 New~ 欢迎“热爱编程”的高考少年——报考杭州电子科技大学计算机学院关于2015年杭电ACM暑期集训队的选拔 继续畅通工程 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 16603    Accepted Submission(s): 713

hdu 1874 畅通工程(最短路)

畅通工程续 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 30144    Accepted Submission(s): 11005 Problem Description 某省自从实行了很多年的畅通工程计划后,终于修建了很多路.不过路多了也不好,每次要从一个城镇到另一个城镇时,都有许多种道路方案可以选择,而某些方案要比另一些方案行