Codeup墓地-问题 D: 继续畅通工程
题目描述
省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可)。现得到城镇道路统计表,表中列出了任意两城镇间修建道路的费用,以及该道路是否已经修通的状态。现请你编写程序,计算出全省畅通需要的最低成本。
输入
测试输入包含若干测试用例。每个测试用例的第1行给出村庄数目N ( 1< N < 100 );随后的 N(N-1)/2 行对应村庄间道路的成本及修建状态,每行给4个正整数,分别是两个村庄的编号(从1编号到N),此两村庄间道路的成本,以及修建状态:1表示已建,0表示未建。
当N为0时输入结束。
输出
每个测试用例的输出占一行,输出全省畅通需要的最低成本。
样例输入
4
1 2 1 1
1 3 6 0
1 4 2 1
2 3 3 0
2 4 5 0
3 4 4 0
3
1 2 1 1
2 3 2 1
1 3 1 0
0
样例输出
3
0
WA原因:运行错误50%,还是数组越界的原因...
#include <iostream>
#include <algorithm>
#include <vector>using namespace std;const int maxn = 100+10;
const int inf = 1000000000;int a; //村庄数目//kruskal
struct edge
{int u, v, dis, state;
}E[maxn];int father[maxn];
int find_father(int x)
{int a = x;while(x != father[x]){x = father[x];}while(a != father[a]){int z = a;a = father[a];father[z] = x;}return x;
}bool cmp(edge a, edge b)
{return a.dis < b.dis;
}int kruskal(int n, int m)
{int ans1 = 0, num_edge = 0;for(int i = 1; i <= n; i++){father[i] = i;}for(int i = 0; i < m; i++){if(E[i].state == 1) //建好了{int u = E[i].u;int v = E[i].v;father[find_father(u)] = find_father(v);num_edge++;}}sort(E, E+m, cmp);for(int i = 0; i < m; i++){int fa = find_father(E[i].u);int fb = find_father(E[i].v);if(fa != fb){father[fa] = fb;ans1 += E[i].dis;num_edge++;if(num_edge == n - 1) break;}}if(num_edge != n - 1){return -1;}else return ans1;
}int main()
{while(scanf("%d", &a) != 0){int b = a * (a-1) / 2;for(int i = 0; i < b; i++){scanf("%d%d%d%d", &E[i].u, &E[i].v, &E[i].dis, &E[i].state);}int ans = kruskal(a, b);if(ans == -1) break;else printf("%d\n", ans);}return 0;
}
Codeup墓地-问题 D: 继续畅通工程相关推荐
- Codeup墓地-问题 A: 还是畅通工程
题目描述 某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离.省政府"畅通工程"的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公 ...
- codeup墓地目录(算法笔记习题刷题笔记)
在线codeup contest 地址:http://codeup.cn/contest.php Contest100000575 - <算法笔记>3.1小节--入门模拟->简单模拟 ...
- codeup墓地目录
代码内容为原创C++ 在线codeup contest 地址:http://codeup.cn/contest.php Contest100000575 - <算法笔记>3.1小节--入门 ...
- [kuangbin带你飞]专题六 最小生成树 L - 还是畅通工程 (简单最小生成树)
L - 还是畅通工程 题目链接:https://vjudge.net/contest/66965#problem/L 题目: 某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离.省政府&qu ...
- 并查集 HDOJ 1232 畅通工程
题目传送门 1 /* 2 并查集(Union-Find)裸题 3 并查集三个函数:初始化Init,寻找根节点Find,连通Union 4 考察:连通边数问题 5 */ 6 #include <c ...
- 畅通工程//最小生成树prim
题目: 畅通工程 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total S ...
- 【1863】畅通工程 (HDU)
畅通工程 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Su ...
- HDOJ 1874 HDU 1874 畅通工程续 ACM 1874 IN HDU
MiYu原创, 转帖请注明 : 转载自 ______________白白の屋 题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=1874 ...
- 畅通工程 HDU - 1233
某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离.省政府"畅通工程"的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可 ...
最新文章
- Android签名机制之---签名验证过程详解
- 整合Flume和Kafka完成实时数据采集
- python对键和值有没有类型限制_第026课:词典:索引不易使用时2,讲,字典,当,不好...
- Linux RPM、YUM、APT包管理工具
- java考前复习之数组
- 安装tif虚拟打印机
- SpringMVC中的父子容器关系
- 是什么的简称_全国各地区车牌号简称,说说你们那的车牌是什么?
- uniapp 小程序支付功能
- 配对和非配对t检验的差异
- 说明:最新谷歌AI智商不超过6岁研究来自科学院而非康内尔大学
- Android 实现应用桌面角标
- win7 查看php版本信息,window_Windows系统版本怎么看?2种查看windows版本的方法介绍,前段时间微软正式开始向Win7和 - phpStudy...
- JAVA的循环结构以及简单操作
- 基于ffplay改造成自定义多开播放器
- Unity android平台读取文件
- Docker安装Elasticsearch及安装中文分词插件
- 了解和深入行业/APP分类
- python元祖修改_Python列表的增删改查和元祖
- 【嵌入式开发教程6】手把手教你做平板电脑-触摸屏驱动实验教程