HDU - 1879 继续畅通工程 【最小生成树 - 升级】
Description
省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可)。现得到城镇道路统计表,表中列出了任意两城镇间修建道路的费用,以及该道路是否已经修通的状态。现请你编写程序,计算出全省畅通需要的最低成本。
Input
测试输入包含若干测试用例。每个测试用例的第1行给出村庄数目N ( 1< N < 100 );随后的 N(N-1)/2 行对应村庄间道路的成本及修建状态,每行给4个正整数,分别是两个村庄的编号(从1编号到N),此两村庄间道路的成本,以及修建状态:1表示已建,0表示未建。
当N为0时输入结束。
Output
每个测试用例的输出占一行,输出全省畅通需要的最低成本。
Sample Input
3 1 2 1 0 1 3 2 0 2 3 4 0 3 1 2 1 0 1 3 2 0 2 3 4 1 3 1 2 1 0 1 3 2 1 2 3 4 1 0
Sample Output
3 1 0
【解析】:依然是最小生成树问题。本题是在已经选定一些边的基础上构建最小生成树。对已经选定的边的处理,有两个思路,一个是将已选定的边的权值设为0,另一个是在输入的时候对该边进行连通图的构建。
【注】:做本题是被坑的最惨的,使用cin/cout一直超时,改成scanf/prinf之后就AC了。从这就能看出,两者效率的差别。
#include <iostream>
#include <stdio.h>
#include <algorithm>using namespace std;int vset[105];
typedef struct{int x, y, value;int state;
}edge;
edge a[5100];
int n, m;bool cmp(edge a, edge b){return a.value < b.value;
}// 查找结点x所属的集合
int findSet(int x){if (x != vset[x])vset[x] = findSet(vset[x]);return vset[x];
}// 判断结点x和y是否连通
bool unionSet(int x, int y){int setX = findSet(x);int setY = findSet(y);if (setX == setY)return false;vset[setY] = setX;return true;
}int main()
{int sumValue;while (~scanf("%d", &m) && m!=0){n = m * (m-1) / 2;sumValue = 0;for (int i = 1; i <= m; i++) // 初始化结点集合vset[i] = i;for (int i = 0; i < n; i++){scanf("%d %d %d %d", &a[i].x, &a[i].y, &a[i].value, &a[i].state);if (a[i].state == 1 && vset[a[i].x]!=vset[a[i].y]) // 已建好的公路unionSet(a[i].x, a[i].y);}sort(a, a+n, cmp);for (int i = 0; i < n; i++){if (a[i].state==0 && unionSet(a[i].x, a[i].y)){sumValue += a[i].value;}}printf("%d\n", sumValue);}return 0;
}
HDU - 1879 继续畅通工程 【最小生成树 - 升级】相关推荐
- hdu 1879 继续畅通工程 最小生成树
继续畅通工程 Time Limit: 2000/ ...
- hdu 1879 继续畅通工程 (最小生成树)
继续畅通工程 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...
- HDU 1879 继续畅通工程 最小生成树
继续畅通工程 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Description ...
- hdu 1879 继续通畅工程(最小生成树)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1879 /************************************************* ...
- hdu 1233 还是畅通工程 最小生成树(prim算法 + kruskal算法)
还是畅通工程 Time Limit: 4000/2 ...
- hdu 1879 继续畅通工程
最小生成树入门题,和纯粹的裸题有些区别,题目中有些道路已经存在,不需要建造,答案是求最后建造的总费用,不要把已经有的道路的权值算进去 //kruskal算法已有的边权植赋为0 //用SORT排序,用并 ...
- hdu 1233 还是畅通工程(最小生成树的Prim和Kruskal两种算法的c++实现)(prim算法详解)...
赤裸裸滴最小生成树(MST),刚学的玩意,用两种方法熟练一下.(都是greedy) Kruskal方法:先对边按照代价非递减排序,再不断添加边且不产生环路,当边数=点数-1结束.判断加入(v,w)是否 ...
- HDU 1233 还是畅通工程(最小生成树 Prim+Kruskal)
原题地址 http://acm.hdu.edu.cn/showproblem.php?pid=1233 题意:(最小生成树裸题)有N个村庄,给出村庄两两之间的距离,要求铺设公路,使得任何两个村庄间都可 ...
- 【HDU - 1863】 畅通工程(并查集+最小生成树)
题干: 省政府"畅通工程"的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可).经过调查评估,得到的统计表中列出了有可能建设公路的 ...
最新文章
- java scanner和for_java中Scanner和random的用法
- php 接受数组_PHP接收前端发送的数组
- CSS自学笔记(16):CSS3 用户界面
- java 和javafx_Java,JavaFX的流利设计风格文本字段和密码字段
- MySQL 获取系统时间/系统日期/日期时间的函数
- C语言结构体(Struct)
- 将pandas DataFrame写入CSV文件
- BZOJ 1717: [Usaco2006 Dec]Milk Patterns 产奶的模式( 二分答案 + 后缀数组 )
- 二调ARCGIS符号库
- 关于UI三色配色的心得
- Cypress使用教程
- wordpress的excerpt()函数
- 微信文件夹的dat文件怎么打开_微信dat文件如何打开?
- 20180418小测
- 计算机excel必备知识,2017职称计算机考试EXCEL知识点:创建图表
- 四川SFSCB-A15/4PY智能浪涌后备保护器 遥信功能 上传防雷系统平台
- Java对象内存空间大小计算
- 剑网三怎么查看服务器角色信息,剑网3如何获取角色?以下这些获取方式请全部掌握!...
- 马毅:低维模型与深度模型的殊途同归
- 分段函数是不是一定初等函数_分段函数是不是初等函数,那这个呢?
热门文章
- AES GCM算法实现
- mysql replicate函数_SQL Server Replicate()函数
- swagger2 介绍+注解说明
- Android项目实践(三)——天气预报APP
- 戴尔服务器主板如何装系统,小编教你戴尔Dell主板电脑如何重装win10系统?
- 【GD32】FreeRTOS-ADC-DMA采集
- [leetcode 44] Wildcard Matching
- 微软Azure建站系列-免费SSL证书
- 数据分析师需要学习那些东西,这里就给大家分享一下自己的经验
- linux pcs是什么系统,linux操作系统版本查看