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 继续畅通工程 【最小生成树 - 升级】相关推荐

  1. hdu 1879 继续畅通工程 最小生成树

    继续畅通工程                                                                             Time Limit: 2000/ ...

  2. hdu 1879 继续畅通工程 (最小生成树)

    继续畅通工程 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

  3. HDU 1879 继续畅通工程 最小生成树

    继续畅通工程 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Description ...

  4. hdu 1879 继续通畅工程(最小生成树)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1879 /************************************************* ...

  5. hdu 1233 还是畅通工程 最小生成树(prim算法 + kruskal算法)

    还是畅通工程                                                                            Time Limit: 4000/2 ...

  6. hdu 1879 继续畅通工程

    最小生成树入门题,和纯粹的裸题有些区别,题目中有些道路已经存在,不需要建造,答案是求最后建造的总费用,不要把已经有的道路的权值算进去 //kruskal算法已有的边权植赋为0 //用SORT排序,用并 ...

  7. hdu 1233 还是畅通工程(最小生成树的Prim和Kruskal两种算法的c++实现)(prim算法详解)...

    赤裸裸滴最小生成树(MST),刚学的玩意,用两种方法熟练一下.(都是greedy) Kruskal方法:先对边按照代价非递减排序,再不断添加边且不产生环路,当边数=点数-1结束.判断加入(v,w)是否 ...

  8. HDU 1233 还是畅通工程(最小生成树 Prim+Kruskal)

    原题地址 http://acm.hdu.edu.cn/showproblem.php?pid=1233 题意:(最小生成树裸题)有N个村庄,给出村庄两两之间的距离,要求铺设公路,使得任何两个村庄间都可 ...

  9. 【HDU - 1863】 畅通工程(并查集+最小生成树)

    题干: 省政府"畅通工程"的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可).经过调查评估,得到的统计表中列出了有可能建设公路的 ...

最新文章

  1. java scanner和for_java中Scanner和random的用法
  2. php 接受数组_PHP接收前端发送的数组
  3. CSS自学笔记(16):CSS3 用户界面
  4. java 和javafx_Java,JavaFX的流利设计风格文本字段和密码字段
  5. MySQL 获取系统时间/系统日期/日期时间的函数
  6. C语言结构体(Struct)
  7. 将pandas DataFrame写入CSV文件
  8. BZOJ 1717: [Usaco2006 Dec]Milk Patterns 产奶的模式( 二分答案 + 后缀数组 )
  9. 二调ARCGIS符号库
  10. 关于UI三色配色的心得
  11. Cypress使用教程
  12. wordpress的excerpt()函数
  13. 微信文件夹的dat文件怎么打开_微信dat文件如何打开?
  14. 20180418小测
  15. 计算机excel必备知识,2017职称计算机考试EXCEL知识点:创建图表
  16. 四川SFSCB-A15/4PY智能浪涌后备保护器 遥信功能 上传防雷系统平台
  17. Java对象内存空间大小计算
  18. 剑网三怎么查看服务器角色信息,剑网3如何获取角色?以下这些获取方式请全部掌握!...
  19. 马毅:低维模型与深度模型的殊途同归
  20. 分段函数是不是一定初等函数_分段函数是不是初等函数,那这个呢?

热门文章

  1. AES GCM算法实现
  2. mysql replicate函数_SQL Server Replicate()函数
  3. swagger2 介绍+注解说明
  4. Android项目实践(三)——天气预报APP
  5. 戴尔服务器主板如何装系统,小编教你戴尔Dell主板电脑如何重装win10系统?
  6. 【GD32】FreeRTOS-ADC-DMA采集
  7. [leetcode 44] Wildcard Matching
  8. 微软Azure建站系列-免费SSL证书
  9. 数据分析师需要学习那些东西,这里就给大家分享一下自己的经验
  10. linux pcs是什么系统,linux操作系统版本查看