畅通工程--hdu1863

畅通工程

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 21234    Accepted Submission(s): 9141

Problem Description

省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可)。经过调查评估,得到的统计表中列出了有可能建设公路的若干条道路的成本。现请你编写程序,计算出全省畅通需要的最低成本。

Input

测试输入包含若干测试用例。每个测试用例的第1行给出评估的道路条数 N、村庄数目M ( < 100 );随后的 N 
行对应村庄间道路的成本,每行给出一对正整数,分别是两个村庄的编号,以及此两村庄间道路的成本(也是正整数)。为简单起见,村庄从1到M编号。当N为0时,全部输入结束,相应的结果不要输出。

Output

对每个测试用例,在1行里输出全省畅通需要的最低成本。若统计数据不足以保证畅通,则输出“?”。

Sample Input

3 3

1 2 1

1 3 2

2 3 4

1 3

2 3 2

0 100

Sample Output

3

?

最小生成树问题,最后不过多一步判断是否能构成一个最小生成树,如果边的个数等于点的个数减一,一定能构成树!

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 using namespace std;
 5
 6 int per[110],cot,m,n;
 7 struct node
 8 {
 9     int b,e,w;
10 }s[110];
11
12 bool cmp(node x,node y)
13 {
14     return x.w<y.w;
15 }
16
17 void init()//初始化
18 {
19     int i;
20     for(i=1;i<110;i++)
21     per[i]=i;
22 }
23
24 int find(int x)
25 {
26     while(x!=per[x])//寻找根节点
27         x=per[x];
28     return x;
29 }
30
31
32 bool join (int x,int y)
33 {
34     int fx=find(x);
35     int fy=find(y);
36     if(fx!=fy)//判断是否构成环
37     {
38         per[fx]=fy;
39         cot++;//记录加了多少边
40         return true;
41     }
42     return false;
43 }
44 int main()
45 {
46     int i;
47     while(scanf("%d%d",&m,&n),m)
48     {
49         init();
50         for(i=0;i<m;i++)
51         scanf("%d%d%d",&s[i].b,&s[i].e,&s[i].w);
52         sort(s,s+m,cmp);
53         int sum=0;
54         cot=0;
55         for(i=0;i<m;i++)
56         {
57             //printf("--- %d %d %d ---\n",s[i].b,s[i].e,s[i].w);
58             if(join(s[i].b,s[i].e))
59             sum+=s[i].w;
60         }
61
62         if(cot==n-1)//记录边的个数和点的个数比较
63         printf("%d\n",sum);
64         else
65         printf("?\n");
66
67     }
68     return 0;
69 }

不明白的欢迎留言!

时间: 2024-10-21 01:26:24

畅通工程--hdu1863的相关文章

ACM-最小生成树之畅通工程——hdu1863

畅通工程 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 15572    Accepted Submission(s): 6462 Problem Description 省政府"畅通工程"的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可).经过调查评估,得到的统计表中列出

HDU1863 - 畅通工程 Prim最小生成树算法

HDU1863 - 畅通工程:http://acm.hdu.edu.cn/showproblem.php?pid=1863 这题我中午用并查集的方法AC了一次,下午学了Prim.换个姿势,再来一次 = =! 并查集的方法:http://blog.csdn.net/p_rogrammer/article/details/47979073 代码: #include <iostream> #include <cstdio> #include <vector> #include

hdu-1863畅通工程 最小生成树克鲁斯卡尔算法kruskal(并查集实现)

畅通工程 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 16994    Accepted Submission(s): 7134 Problem Description 省政府"畅通工程"的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可).经过调查评估,得到的统计表中列出

HDU1863 畅通工程 【最小生成树Prim】

畅通工程 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 16722    Accepted Submission(s): 6987 Problem Description 省政府"畅通工程"的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可).经过调查评估,得到的统计表中列出

HDU1863 畅通工程---(最小生成树)

畅通工程 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 27972    Accepted Submission(s): 12279 Problem Description 省政府"畅通工程"的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可).经过调查评估,得到的统计表中列出

hdu1863 畅通工程2 还是用并查集思想解决最小生成树问题

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

hdu1863 畅通工程 并查集+最小生成树

Problem Description 省政府"畅通工程"的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可).经过调查评估,得到的统计表中列出了有可能建设公路的若干条道路的成本.现请你编写程序,计算出全省畅通需要的最低成本. Input 测试输入包含若干测试用例.每个测试用例的第1行给出评估的道路条数 N.村庄数目M ( < 100 ):随后的 N 行对应村庄间道路的成本,每行给出一对正整数,分别是两个村庄的编号,以及此两村庄间

HDU - 1232 畅通工程

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

HDU 1389 继续畅通工程【最小生成树,Prime算法+Kruskal算法】

继续畅通工程 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 21871    Accepted Submission(s): 9356 Problem Description 省政府"畅通工程"的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可).现得到城镇道路统计表,表中列