544 - Heavy Cargo
来源:互联网 发布:elasticsearch5 linux 编辑:程序博客网 时间:2024/05/21 11:27
最大生成树
#include <iostream>#include <algorithm>#include <cstdio>#include <cstring>#include <map>using namespace std;const int maxn = 100 + 7;const int maxm = 19900 + 7;const int INF = ~0U >> 1;int n, m, kase = 0;int p[maxn];struct node { int u, v, val; bool operator<(const node&r) const { return val > r.val; }}str[maxm];map<string, int> ma;int Find(int x) { return p[x] == x ? x : p[x] = Find(p[x]); }int main() { while(scanf("%d%d", &n, &m) != EOF && n && m) { ma.clear(); for(int i = 0; i <= n; ++i) p[i] = i; char s1[100] = {0}, s2[100] = {0}; int val, k = 0; for(int i = 0; i < m; ++i) { scanf("%s%s%d", s1, s2, &val); string a(s1), b(s2); if(ma.count(a) == 0) ma[a] = k++; if(ma.count(b) == 0) ma[b] = k++; str[i] = (node){ma[a], ma[b], val}; } scanf("%s%s", s1, s2); string a(s1), b(s2); int u = ma[a], v = ma[b]; sort(str, str + m); int ans = INF; for(int i = 0; i < m; ++i) { node e = str[i]; int x = Find(e.u), y = Find(e.v); if(x != y) { p[x] = y; ans = min(ans, e.val); } x = Find(u), y = Find(v); if(x == y) break; } printf("Scenario #%d\n", ++kase); printf("%d tons\n\n", ans); } return 0;}
0 0
- UVa 544 - Heavy Cargo
- 544 - Heavy Cargo
- uva 544 - Heavy Cargo(生成树)
- ZJU 1952 Heavy Cargo
- zoj 1952 Heavy Cargo
- POJ 2263 Heavy Cargo
- poj 2263 Heavy Cargo
- zoj 1952 Heavy Cargo
- POJ2263:Heavy Cargo
- poj_2263 Heavy Cargo (Dijkstra)
- poj 2263 Heavy Cargo
- 12:Heavy Cargo
- zoj Heavy Cargo
- POJ 2263 Heavy Cargo
- poj 2263 Heavy Cargo
- POJ:2263 Heavy Cargo
- Heavy Cargo(数论)
- POJ-2263 Heavy Cargo
- OC中的点语法,成员变量,@property和@synthesize:id类型,构造函数
- 6.3 cmath--数学函数
- HDOJ 5631Rikka with Graph(图论)
- 机房重构—组合查询&模板方法
- ubuntu安装navicat及常见问题解决
- 544 - Heavy Cargo
- POJ 1014 Dividing
- JAVA多线程-线程间通信(五)-类ThreadLocal的使用
- 《计算机网络》知识要点一
- 4278: [ONTAK2015]Tasowanie 后缀数组+贪心
- spring拦截器配置
- Servlet—HttpServletResponse
- CodeForces 630 G. Challenge Pennants(组合数学)
- 《JAVA语言程序设计》(二)