A - 还是畅通工程(最小生成树)
Input测试输入包含若干测试用例。每个测试用例的第1行给出村庄数目N ( < 100 );随后的N(N-1)/2行对应村庄间的距离,每行给出一对正整数,分别是两个村庄的编号,以及此两村庄间的距离。为简单起见,村庄从1到N编号。
当N为0时,输入结束,该用例不被处理。
Output对每个测试用例,在1行里输出最小的公路总长度。
Sample Input
- 3
- 1 2 1
- 1 3 2
- 2 3 4
- 4
- 1 2 1
- 1 3 4
- 1 4 1
- 2 3 3
- 2 4 2
- 3 4 5
- 0
Sample Output
- 3
- 5
- Huge input, scanf is recommended.
隔了那么长时间再来做这道题,还是犯了上次同样的错误,初始化parent数组
- for(int i = 0; i <= n; i++)
这个地方一定是<=,一直不过真的很不爽,还是自己对代码不熟悉。
AC代码
- #include<stdio.h>
- #include<algorithm>
- using namespace std;
- int parent[]; //定义parent数组用来判断边与边是否形成环路
- int sum;
- struct Edge
- {
- int beginn;
- int endd;
- int weight;
- } edges[];
- bool cmp(Edge a, Edge b)
- {
- if(a.weight == b.weight)
- return a.beginn < b.beginn;
- else
- return a.weight < b.weight;
- }
- int Find(int f)
- {
- while( parent[f] > )
- {
- f = parent[f];
- }
- return f;
- }
- //Kruskal算法生成最小生成树
- void MiniSpanTree_Kruskal(int x, int y)
- {
- int i, n, m;
- for( i = ; i <= x; i++ )
- {
- parent[i] = ;
- }
- for( i = ; i < y; i++ )
- {
- n = Find(edges[i].beginn);
- m = Find(edges[i].endd);
- if( n != m ) //如果n==m,则形成环路不满足!
- {
- parent[n] = m; //将此边的结尾顶点放入下标为起点的parent数组中,表示此顶点已经在生成树集合中
- sum += edges[i].weight;
- }
- }
- printf("%d\n", sum);
- }
- int main()
- {
- int t, i, ans;
- while(scanf("%d", &t) != EOF , t)
- {
- sum = ;
- ans = t*(t - )/;
- for( i = ; i < ans; i++ )
- {
- scanf("%d %d %d", &edges[i].beginn, &edges[i].endd, &edges[i].weight);
- }
- sort(edges, edges+ans, cmp);
- MiniSpanTree_Kruskal(t, ans);
- }
- return ;
- }
还有一种叫做PRIM算法的也可以解这道题。
PRIM算法
A - 还是畅通工程(最小生成树)的更多相关文章
- hdu 1879 继续畅通工程 (最小生成树)
继续畅通工程 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm ...
- HDU1863 畅通工程---(最小生成树)
畅通工程 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- hdu 1233 还是畅通工程 最小生成树(prim算法 + kruskal算法)
还是畅通工程 Time Limit: 4000/2 ...
- HDU 1233 还是畅通工程 (最小生成树)
还是畅通工程 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Subm ...
- hdu1863 畅通工程(最小生成树之prim)
Problem Description 省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可).经过调查评估,得到的统计表中列出了有可 ...
- C - 继续畅通工程 最小生成树
省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可).现得到城镇道路统计表,表中列出了任意两城镇间修建道路的费用,以及该道路是否已经 ...
- HDU 1233.还是畅通工程-最小生成树(Prime)
还是畅通工程 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Subm ...
- 还是畅通工程(最小生成树 并查集 Prim Kruskal)
Description 某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离.省政府"畅通工程"的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只 ...
- HDU 1863 畅通工程(最小生成树,prim)
题意: 给出图的边和点数,要求最小生成树的代价,注:有些点之间是不可达的,也就是可能有多个连通图.比如4个点,2条边:1-2,3-4. 思路: 如果不能连通所有的点,就输出‘?’.之前以为每个点只要有 ...
- (step6.1.5)hdu 1233(还是畅通工程——最小生成树)
题目大意:输入一个整数n,表示有n个村庄,在接下来的n*(n-1)/2中,每行有3个整数beigin.end.weight,分别表示路的起始村庄,结束村庄和村庄之间的距离. 求索要修的路的最短距离 解 ...
随机推荐
- sql server2008本地连接选择windows身份验证无法登陆的解决办法
1.安装完sqlserver数据库,本地连接登录不了 解决办法:进入cmd,输入net start mssqlserver 服务启动后,再次用windows身份验证就可以登陆本地数据库了
- 【334】Python Object-Oriented Programming
Reference: Python中self用法详解 __init__ 方法: 私有变量. Reference: [290]Python 函数 class 里面的 function 创建与此一致,只是 ...
- Unpacking Argument Lists
[Unpacking Argument Lists] The reverse situation occurs when the arguments are already in a list or ...
- errorlevel 续1
-------siwuxie095 常用 errorlevel 返回值: backup 0 备份成功 1 未找到备份文件 2 文件共享冲突阻止备份完成 3 用户用 ct ...
- 如何快速简单粗暴地理解Python中的if __name__ == '__main__'
1. 摘要 通俗的理解__name__ == '__main__':假如你叫小明.py,在朋友眼中,你是小明(__name__ == '小明'):在你自己眼中,你是你自己(__name__ == '_ ...
- Template7学习记录
来源:http://idangero.us/template7/#.V2iXqJGF6Ul 测试用json数据: var jsonData = { people: [ { firstName: 'Jo ...
- error:Your local changes to the follwing files would be overwritten by merge
- [SoapUI]怎样获取上一个Test Step的名字
def currentStepInd = context.currentStepIndex def previousStep = testRunner.testCase.getTestStepAt(c ...
- 微交互:App成功的秘诀
以下内容由Mockplus团队翻译整理,仅供学习交流,Mockplus是更快更简单的原型设计工具. 最好的产品拥有两个很棒的特点:功能和细节.产品的功能可成功吸引到人们的注意力,而产品的细节则可留住你 ...
- 不要怂,就是GAN (生成式对抗网络) (三):判别器和生成器 TensorFlow Model
在 /home/your_name/TensorFlow/DCGAN/ 下新建文件 utils.py,输入如下代码: import scipy.misc import numpy as np # 保存 ...