题意:在一张无向带权图中,求a-b的一条路经满足这条路径上的最小的边最大。

思路:仔细一看就能发现这不是最小瓶颈路的变形嘛,最小瓶颈路是让你求最大的边最小,这道题的意思就是反了一下,而且还是单组询问的。所以我们用kruskal先求最大生成树,然后第一次合并询问节点的边即为答案。

代码如下:

 1 /**************************************************
 2  * Author     : xiaohao Z
 3  * Blog     : http://www.cnblogs.com/shu-xiaohao/
 4  * Last modified : 2014-02-05 17:03
 5  * Filename     : uva_544.cpp
 6  * Description     :
 7  * ************************************************/
 8
 9 #include <iostream>
10 #include <cstdio>
11 #include <cstring>
12 #include <cstdlib>
13 #include <cmath>
14 #include <algorithm>
15 #include <queue>
16 #include <stack>
17 #include <vector>
18 #include <set>
19 #include <map>
20 #define MP(a, b) make_pair(a, b)
21 #define PB(a) push_back(a)
22
23 using namespace std;
24 typedef long long ll;
25 typedef pair<int, int> pii;
26 typedef pair<unsigned int,unsigned int> puu;
27 typedef pair<int, double> pid;
28 typedef pair<ll, int> pli;
29 typedef pair<int, ll> pil;
30
31 const int INF = 0x3f3f3f3f;
32 const double eps = 1E-6;
33 const int LEN = 1010;
34 int n, m, parent[LEN], st, ed;
35 map<string, int> mp;
36 struct edge{int fr, to, val;}e[LEN*LEN];
37
38 void init(){
39     mp.clear();
40     for(int i=0; i<LEN; i++) parent[i] = i;
41 }
42 int Find(int x){return parent[x]==x?x:parent[x] = Find(parent[x]);}
43 bool cmp(edge a, edge b){ return a.val > b.val;}
44
45 int kruskal()
46 {
47     sort(e, e+m, cmp);
48     for(int i=0; i<m; i++){
49         int pa = Find(e[i].fr), pb = Find(e[i].to);
50         if(pa == pb) continue;
51         parent[pa] = pb;
52         if(Find(st) == Find(ed)) return e[i].val;
53     }
54 }
55
56 int main()
57 {
58     //freopen("in.txt", "r", stdin);
59
60     char a[101], b[101], val;
61     int ia, ib, kase = 1;
62     while(scanf("%d%d", &n, &m)!=EOF){
63         init();
64         if(!n && !m) break;
65         int cnt = 0;
66         for(int i=0; i<m; i++){
67             scanf("%s%s%d", a, b, &e[i].val);
68             if(!mp.count(a))mp[a] = ia = cnt++;
69             else ia = mp[a];
70             if(!mp.count(b))mp[b] = ib = cnt++;
71             else ib = mp[b];
72             e[i].fr = ia, e[i].to = ib;
73         }
74         scanf("%s%s", a, b);
75         st = mp[a]; ed = mp[b];
76         int ans = kruskal();
77         printf("Scenario #%d\n", kase++);
78         printf("%d tons\n\n", ans);
79     }
80     return 0;
81 }

View Code

转载于:https://www.cnblogs.com/shu-xiaohao/p/3538360.html

uva 544(kruskal 变形)相关推荐

  1. 【数据结构】 最小生成树(四)——利用kruskal算法搞定例题×3+变形+一道大水题...

    在这一专辑(最小生成树)中的上一期讲到了prim算法,但是prim算法比较难懂,为了避免看不懂,就先用kruskal算法写题吧,下面将会将三道例题,加一道变形,以及一道大水题,水到不用高级数据结构,建 ...

  2. uva 10034 Freckles (kruskal||prim)

    题目上仅仅给的坐标,没有给出来边的长度,不管是prim算法还是kruskal算法我们都须要知道边的长度来操作. 这道题是浮点数,也没啥大的差别,处理一下就能够了. 有关这两个算法的介绍前面我已经写过了 ...

  3. P1967,ssl2267-货车运输【树上倍增LCA,最小生成树变形kruskal】

    正题 题目链接: https://www.luogu.org/problemnew/show/P1967 大意 一个无向图,每个边有个权值,若干个询问,求两个点之间的一条最短路是这条最短路上的最小权值 ...

  4. UVa 1394 约瑟夫问题的变形

    https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  5. 【Kruskal】Uva 1395 Slim Span

    这段时间要沉迷刷题一段时间了,就让CSDN陪我一起吧! 一.题目大意 题目的大致意思就是要你求一个图的生成树,要保证求解的这棵生成树的边的权值,最大值减去最小值最小,要求输出这个最小值. 二.题目思路 ...

  6. UVA 1471 Defense Lines (LIS变形)

    题意:删除原序列中的一段连续子序列,使得剩下的序列中存在一段最长连续子序列. 题解:LIS变形 我们用l[i]l[i]l[i]和r[i]r[i]r[i]记录往右以iii结尾和往左以iii开头的最长连续 ...

  7. UVA 10074 Take the Land(最大子矩阵和变形)

    题目大意:输入矩阵,找出元素全为0的子矩阵的元素最大和. 解题策略:将0,1转换,动态规划中判断最长子区间和与当前列的大小的关系. /*UVA 10074 Take the LandAC by J.D ...

  8. Uva 10048 - Audiophobia (Floyd变形)

    题目链接 https://vjudge.net/problem/UVA-10048 [题意] 输入一个C个点,S个边(C<=100,S<=1000)的无向图,边权表示该路径上的噪声值,当你 ...

  9. UVA 1471 Defense Lines 防线 (LIS变形)

    给一个长度为n的序列,要求删除一个连续子序列,使剩下的序列有一个长度最大的连续递增子序列. 最简单的想法是枚举起点j和终点i,然后数一数,分别向前或向后能延伸的最长长度,记为g(i)和f(i).可以先 ...

最新文章

  1. 《C++面向对象高效编程(第2版)》——2.20 什么是多线程安全类
  2. 用python写脚本看什么书-终于知晓python编写脚本入门教程
  3. xml操作之创建xml节点
  4. Hystrix 熔断器03 —— hystrix 案例之高并发测试案例的解决方案
  5. win8 Windows 8 设置 默认浏览器
  6. 很好的 .NET 换肤软件 IrisSkin
  7. go语言一个包含nil指针的接口不是nil接口的理解
  8. Spring 基础 用mock对Controller执行测试(系列号4)
  9. AngularJS 后台交互
  10. 研究员使用新型CPU攻击技术 “SmashEx” 攻破 Intel SGX
  11. vim设置tab宽度为4_vim编辑器VimScript插件开发系列一「定制Vim 3」
  12. 简单几步把Spring Boot 项目部署到 K8S,步骤来了!
  13. 就问你慌不慌:每天都有 一百万 程序员在投简历
  14. python网络编程百度云_python网络编程.mobi
  15. 前端-js网页特效(三)动画效果及原理
  16. Python爬虫 Selenium实现自动登录163邮箱和Locating Elements介绍
  17. python数据类型小结
  18. 弹性盒子(弹性布局)
  19. python 有损和无损 方式替换表情符号
  20. POW证明代码实现demo[区块链]

热门文章

  1. (0030) iOS 开发之跳转之转场动画
  2. mysql slave 详细配置_进击的MysqlSlave环境搭建及配置
  3. 7.20套娃(tao)
  4. (14)Why some people find exercise harder than others
  5. weblogic在linux服务器上部署应用
  6. node.js学习随笔
  7. android源码framework下添加新资源的方法
  8. 未能创建Microsoft Visual C# 2008 编译器 解决方案【轉】
  9. C# MainWindowHandle为0的解决方法
  10. 使用mock解决测试中依赖第三方接口的问题