HDU-1233 还是畅通工程
来源:互联网 发布:展示实时数据 时间轴 编辑:程序博客网 时间:2024/05/21 11:15
#include <iostream>#include <cstdio>#include <algorithm>using namespace std;const int maxn = 5000 + 5;int t, n, ans, cnt;struct streat{ int op; int ed; int len; bool operator < (const streat Next) const { return len < Next.len; }} edge[maxn];int root[105];int Find(int x){ return root[x] == x ? x : root[x] = Find(root[x]);}void Kruskal(){ ans = 0; for(int i = 1; i <= n; i ++) root[i] = i; sort(edge, edge + t); cnt = 0; for(int i = 0; i < t; i ++) { int x = Find(edge[i].op); int y = Find(edge[i].ed); if(x != y) { root[y] = x; ans += edge[i].len; cnt ++; } if(cnt == n - 1) break; }}int main(){ while(~scanf("%d", & n) && n) { t = n * (n - 1) / 2; for(int i = 0; i < t; i ++) scanf("%d %d %d", & edge[i].op, & edge[i].ed, & edge[i].len); Kruskal(); printf("%d\n", ans); } return 0;}
题意:
目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可),并要求铺设的公路总长度为最小。请计算最小的公路总长度。
测试输入包含若干测试用例。每个测试用例的第1行给出村庄数目N ( < 100 );随后的N(N-1)/2行对应村庄间的距离,每行给出一对正整数,分别是两个村庄的编号,以及此两村庄间的距离。为简单起见,村庄从1到N编号。 输入0结束。
题解:一开始没注意root[]的下标应该从1开始到n(一直从0开始..一直wa)。注意root初值, cnt初值(cnt剪枝)
0 0
- hdu 1233 还是畅通工程
- HDU 1233 还是畅通工程
- hdu 1233 还是畅通工程
- HDU 1233 还是畅通工程
- hdu 1233 还是畅通工程
- hdu 1233 还是畅通工程
- HDU 1233 还是畅通工程
- hdu 1233 还是畅通工程
- HDU 1233 还是畅通工程
- hdu 1233 还是畅通工程
- hdu - 1233 - 还是畅通工程
- hdu 1233 还是畅通工程
- hdu 1233 还是畅通工程
- hdu 1233 还是畅通工程
- hdu 1233 还是畅通工程
- HDU 1233 还是畅通工程
- HDU-1233-还是畅通工程
- HDU-1233-还是畅通工程
- JSP中九大内置对象详解
- poj1904
- MongoDB 日期查询与mongodump 按日期范围导出数据
- List 的add()与addAll()的区别
- 【bzoj1042】【HAOI2008】【硬币购物】【dp+容斥原理】
- HDU-1233 还是畅通工程
- 活动之间数据的传递
- Android通过PHP连接MySQL数据库(插入)
- FreeMarker 指令
- 库编译
- HDU-1863 畅通工程
- 北京-IT技术狗-顾名思义 解释一下当时随手写下这个名字
- Codeforces Round #201 (Div. 2) 347C Alice and Bob(脑洞)
- 有向图中单个源点到终点的最短路径--Dijkstra算法与实现