uva 544(kruskal 变形)
2014-02-05 17:39
295 查看
题意:在一张无向带权图中,求a-b的一条路经满足这条路径上的最小的边最大。
思路:仔细一看就能发现这不是最小瓶颈路的变形嘛,最小瓶颈路是让你求最大的边最小,这道题的意思就是反了一下,而且还是单组询问的。所以我们用kruskal先求最大生成树,然后第一次合并询问节点的边即为答案。
代码如下:
View Code
思路:仔细一看就能发现这不是最小瓶颈路的变形嘛,最小瓶颈路是让你求最大的边最小,这道题的意思就是反了一下,而且还是单组询问的。所以我们用kruskal先求最大生成树,然后第一次合并询问节点的边即为答案。
代码如下:
/************************************************** * Author : xiaohao Z * Blog : http://www.cnblogs.com/shu-xiaohao/ * Last modified : 2014-02-05 17:03 * Filename : uva_544.cpp * Description : * ************************************************/ #include <iostream> #include <cstdio> #include <cstring> #include <cstdlib> #include <cmath> #include <algorithm> #include <queue> #include <stack> #include <vector> #include <set> #include <map> #define MP(a, b) make_pair(a, b) #define PB(a) push_back(a) using namespace std; typedef long long ll; typedef pair<int, int> pii; typedef pair<unsigned int,unsigned int> puu; typedef pair<int, double> pid; typedef pair<ll, int> pli; typedef pair<int, ll> pil; const int INF = 0x3f3f3f3f; const double eps = 1E-6; const int LEN = 1010; int n, m, parent[LEN], st, ed; map<string, int> mp; struct edge{int fr, to, val;}e[LEN*LEN]; void init(){ mp.clear(); for(int i=0; i<LEN; i++) parent[i] = i; } int Find(int x){return parent[x]==x?x:parent[x] = Find(parent[x]);} bool cmp(edge a, edge b){ return a.val > b.val;} int kruskal() { sort(e, e+m, cmp); for(int i=0; i<m; i++){ int pa = Find(e[i].fr), pb = Find(e[i].to); if(pa == pb) continue; parent[pa] = pb; if(Find(st) == Find(ed)) return e[i].val; } } int main() { //freopen("in.txt", "r", stdin); char a[101], b[101], val; int ia, ib, kase = 1; while(scanf("%d%d", &n, &m)!=EOF){ init(); if(!n && !m) break; int cnt = 0; for(int i=0; i<m; i++){ scanf("%s%s%d", a, b, &e[i].val); if(!mp.count(a))mp[a] = ia = cnt++; else ia = mp[a]; if(!mp.count(b))mp[b] = ib = cnt++; else ib = mp[b]; e[i].fr = ia, e[i].to = ib; } scanf("%s%s", a, b); st = mp[a]; ed = mp[b]; int ans = kruskal(); printf("Scenario #%d\n", kase++); printf("%d tons\n\n", ans); } return 0; }
View Code
相关文章推荐
- 浅谈设计模式--建造器模式(Builder Pattern)
- Mac OS X 10.9 文件(资源)选取窗长时间加载bug的修复
- 关于内存对界
- Java面向对象编程 (Java 类的基本构成)
- 线程同步1——synchronized
- vim 安装 Jedi-vim 报错(E121: Undefined variable: g:jedi#call_signature_escape)
- C 中标准库函数 qsort 的用法
- SOS
- DIY远程控制开关(tiny6410+LED+yeelink+curl)
- 关于编码的一切
- 1061成绩排序(c中qsort,strcmp函数的使用)
- HDU 2138 How many prime numbers
- 处理散列冲突的方法 - 数据结构和算法85
- 紫外线消毒器水处理杀菌的四大优势分析
- JQuery Introduction
- shell-init: error retrieving current directory: getcwd: cannot access parent directories: No such fi
- C#.NET 大型通用信息化系统集成快速开发平台 4.1 版本 - 对外不要提供Delete方法加强软件的安全性
- [floyd]HDU 1181变形课
- C++回顾之引用
- 孙鑫 VC++深入详解第15课——多线程