06-3. 公路村村通(30)
来源:互联网 发布:淘宝宝贝图片怎么下载 编辑:程序博客网 时间:2024/04/27 16:05
06-3. 公路村村通(30)
时间限制
400 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通所需要的最低成本。
输入格式说明:
输入数据包括城镇数目正整数N(<=1000)和候选道路数目M(<=3N);随后的M行对应M条道路,每行给出3个正整数,分别是该条道路直接连通的两个城镇的编号以及该道路改建的预算成本。为简单起见,城镇从1到N编号。
输出格式说明:
输出村村通需要的最低成本。如果输入数据不足以保证畅通,则输出-1,表示需要建设更多公路。
思路:
一个裸的最小生成树算法,最后需要判断一下是否所有顶点都连通
/*********************************************** * Author: fisty * Created Time: 2015/1/19 22:52:56 * File Name : 06-3.cpp *********************************************** */#include <iostream>#include <cstring>#include <deque>#include <cmath>#include <queue>#include <stack>#include <list>#include <map>#include <string>#include <vector>#include <cstdio>#include <bitset>#include <algorithm>using namespace std;#define Debug(x) cout << #x << " " << x <<endlconst int INF = 0x3f3f3f3f;typedef long long LL;typedef pair<int, int> P;#define MAX_N 3010int n,m;int _rank[MAX_N],par[MAX_N];struct edge{ int u; int v; int cost; edge(int _u = 0, int _v = 0, int _cost = 0):u(_u), v(_v), cost(_cost){}}G[MAX_N];bool cmp(const edge a,const edge b){ return a.cost < b.cost;}//并查集建立void init(int n){ for(int i = 1;i <= n; i++){ par[i] = i; _rank[i] = 0; }}int find(int x){ if(par[x] == x) return x; return par[x] = find(par[x]);} void unit(int x, int y){ x = find(x); y = find(y); if(x == y) return ; if(_rank[x] < _rank[y]){ par[x] = y; }else{ par[y] = x; if(_rank[x] == _rank[y]){ _rank[x]++; } }}//最小树算法int kruskal(){ sort(G, G + m, cmp); int res = 0; for(int i = 0;i < m; i++){ edge e = G[i]; if(find(e.v) != find(e.u)){ unit(e.u, e.v); res += e.cost; } } return res;}int main(){ //freopen("in.txt", "r", stdin); cin.tie(0); ios::sync_with_stdio(false); cin >> n >> m; init(n); for(int i = 0;i < m; i++){ cin >> G[i].u >> G[i].v >> G[i].cost; } int ans = kruskal(); //检查是否可以连通所有结点 int ok = 1; for(int i = 1;i <= n;i++){ for(int j = i+1; j <= n; j++){ if(find(i) != find(j)){ ok = 0; break; } } } if(ok) //可以连通 cout << ans << endl; else //不足以连通 cout << "-1" << endl; return 0;}
0 0
- 06-3. 公路村村通(30)
- 06-3. 公路村村通(30) 最小生成树
- 06-图6. 公路村村通(30) java
- 06-图6. 公路村村通(30)
- 06-图6. 公路村村通(30)
- 公路村村通(30 分)
- 公路村村通 (30分)
- 村村通公路(Prim)
- 7-10 公路村村通(30 分)
- 7-10 公路村村通(30 分)
- 08-图7 公路村村通(30 分)
- 7-10 公路村村通(30 分)
- PAT 数据结构 06-图6. 公路村村通(30)Prim最小生成树算法
- 06-图6. 公路村村通(30)--最小生成树-prime-kruskal
- 5-10 公路村村通 (30分)
- 5-10 公路村村通 (30分)
- 5-9 公路村村通 (30分)
- 公路村村通 (最小生成树)
- c语言学习笔记
- JAVA复习笔记--------文件IO
- hdu 1596 find the safest road (Dijksrta算法)
- Concurrent programming - Principles and introduction to processes
- 设计模式——单例模式(饿汉式、懒汉式)
- 06-3. 公路村村通(30)
- 排序算法五:希尔排序
- 混合高斯模型用于图像分割
- hdu 3501 欧拉函数的拓展
- 动态语言已死?
- 浅谈Console.WriteLine();
- 关于XML的十种观点
- MQTT协议之订阅及发布(使用paho-mqtt-client或mqttv3实现)
- [翻译]中级Git用户的25个使用技巧(下)