题目描述:
省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可)。现得到城镇道路统计表,表中列出了任意两城镇间修建道路的费用,以及该道路是否已经修通的状态。现请你编写程序,计算出全省畅通需要的最低成本。
输入:
测试输入包含若干测试用例。每个测试用例的第1行给出村庄数目N ( 1< N < 100 );随后的 N(N-1)/2 行对应村庄间道路的成本及修建状态,每行给4个正整数,分别是两个村庄的编号(从1编号到N),此两村庄间道路的成本,以及修建状态:1表示已建,0表示未建。

当N为0时输入结束。

输出:
每个测试用例的输出占一行,输出全省畅通需要的最低成本。
样例输入:
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
样例输出:
3
1
0


思路:Kruskal算法应用,这题与九度OJ——1024畅通工程 和九度OJ——1017还是畅通工程 有点像,但新特点,主要是加入了该路是否已经修建的标志数据项,如已经修建那么把边数减1,并把边的两顶点进行并操作,单边不加入最小堆,剩下的边进行Kruskal算法,得到最小花费。
AC代码:

#include <iostream>
#include <queue>
using namespace std;typedef struct node{int start;int end;int len;
}Edge;struct cmp{bool operator() (Edge e1,Edge e2){return e1.len>e2.len;   }
};const int MAX = 101;
int data[MAX];
int N,M,start,end,len,flag;
Edge e;
priority_queue<Edge,vector<Edge>,cmp> Q;int Find(int root)
{if(data[root] < 0){return root;}return data[root] = Find(data[root]);
}void Union(int root1 ,int root2)
{root1 = Find(root1);root2 = Find(root2);if(root1 == root2){return;}else if(root1 < root2){data[root1] += data[root2];data[root2] = root1;}else{data[root2] += data[root1];data[root1] = root2;}M--;
}int Kruskal()
{int sum =0;while(!Q.empty()){Edge e = Q.top();Q.pop();int root1 = e.start;int root2 = e.end;if(Find(root1) != Find(root2)){sum += e.len;Union(root1,root2);}if(M == 1){break;} }return sum;} int main()
{while(cin>>N){if(N == 0){break;}while(!Q.empty()){Q.pop();}for(int i = 0 ; i < MAX ; i++){data[i] = -1;}M = N*(N-1)/2;for(int i = 0 ; i < N*(N-1)/2 ; i++){cin>>start>>end>>len>>flag;if(flag == 1){Union(start,end);M--;}else{e.start = start;e.end = end;e.len = len;Q.push(e);}}cout<<Kruskal()<<endl;}return 0;
}

九度OJ——1028继续畅通工程相关推荐

  1. 九度OJ 1028:继续畅通工程 (最小生成树)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:3140 解决:1338 题目描述: 省政府"畅通工程"的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公 ...

  2. 九度OJ 1024 畅通工程 -- 并查集、贪心算法(最小生成树)

    题目地址:http://ac.jobdu.com/problem.php?pid=1024 题目描述: 省政府"畅通工程"的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有 ...

  3. 打不开磁盘配额linux,九度OJ 1455 珍惜现在,感恩生活 -- 动态规划(背包问题)...

    题目描述: 为了挽救灾区同胞的生命,心系灾区同胞的你准备自己采购一些粮食支援灾区,现在假设你一共有资金n元,而市场有m种大米,每种大米都是袋装产品,其价格不等,并且只能整袋购买.请问:你用有限的资金最 ...

  4. Freckles - 九度 OJ 1144

    Freckles - 九度 OJ 1144 题目 时间限制:1 秒 内存限制:128 兆 特殊判题:否 题目描述: In an episode of the Dick Van Dyke show, l ...

  5. 非常可乐(九度 OJ 1457)

    非常可乐(九度 OJ 1457) 时间限制:1 秒 内存限制:32 兆 特殊判题:否 1.题目描述: 大家一定觉的运动以后喝可乐是一件很惬意的事情,但是 seeyou 却不这么认为.因为每次当 see ...

  6. 九度OJ 题目1179:阶乘

    /********************************* * 日期:2013-2-8 * 作者:SJF0115 * 题号: 九度OJ 题目1179:阶乘 * 来源:http://ac.jo ...

  7. Leagal or Not - 九度 OJ 1448

    Leagal or Not - 九度 OJ 1448 题目 时间限制:1 秒 内存限制:128 兆 特殊判题:否 题目描述: ACM-DIY is a large QQ group where man ...

  8. 九度OJ 题目1069:查找学生信息 随笔

    ** 九度OJ 题目1069:查找学生信息 ** 题目描述如下: 输入N个学生的信息,然后进行查询. 输入 输入的第一行为N,即学生的个数(N<=1000) 接下来的N行包括N个学生的信息,信息 ...

  9. 九度OJ 题目1203:IP地址

    /********************************* * 日期:2013-2-8 * 作者:SJF0115 * 题号: 九度OJ 题目1203:IP地址 * 来源:http://ac. ...

最新文章

  1. 十周第一次课(5月25日)
  2. 英特尔紧急召回SB主板,Intel 6系列芯片组设计缺陷
  3. c# 连续抓取页面内容
  4. UWP Composition API - RadialMenu
  5. Libra教程之:执行Transactions
  6. Unity 2017 Game Optimization 读书笔记 Dynamic Graphics (6)
  7. 谷歌退出中国几成定局 谈判已谈崩
  8. jpannel设置位置xy_实用的摄影技巧!10种常见摄影场景的单反相机设置技巧!
  9. python设置时间步长与时间离散格式_python怎么定义时间
  10. 左右布局图文排版设计灵感案例
  11. 公有云、私有云、混合云的区别比较
  12. layUI日期格式转换
  13. Atitit swt 4.3 4.4 4.5 新特性java attilax总结
  14. java单线程共享,「Java并发编程实战」之对象的共享
  15. 修改msde登录方式,设置sa密码为空
  16. SpringBoot Starter自动装配的原理
  17. js实现页面加载完毕之前显示Loading效果
  18. python人口普查数据数据分析_美国人口普查数据可视化探索和收入水平预测建模...
  19. 2018 Android 框架汇总(转)
  20. 海康威视监控下载下来的mp4格式的视频,小类别MPEG-PS格式,这种格式在浏览器中没法播放,跪求播放方法。

热门文章

  1. ITU、MCC和MNC介绍以及China运营商对照表
  2. 武汉理工计算机研究生就业去向统计,考研高校就业和薪酬数据统计:武汉理工大学...
  3. Air780E|联通|雁飞格|AT命令|物联网|三元组|鉴权|算法|密钥生成|(4)-联通雁飞格物手动接入步骤
  4. opencv实现camera模组的暗电流和lenshading补偿
  5. openwrt 配置网桥 vlan 多个wan口 以及web界面配置总结
  6. Office生成宏病毒配合msf+cobaltstrike夺取主机控制权
  7. leap motion java_[Leap Motion开发文档翻译]Leap Motion架构
  8. 橘子学设计模式之策略模式
  9. 【面试经验】三轮面试拿到华为Offer
  10. FPGA调试过程中识别不到设备Labtoolstcl 44-494