题意:

  给你一张无向图,然后有若干组询问,让你输出a->b的最小瓶颈路。

解析:

  应该都想过用prime的次小生成树做。。但二维数组开不了那么大。。所以只能用kruskal了。。。。

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <sstream>
  4. #include <cstring>
  5. #include <map>
  6. #include <set>
  7. #include <vector>
  8. #include <stack>
  9. #include <queue>
  10. #include <algorithm>
  11. #include <cmath>
  12. #define rap(i, a, n) for(int i=a; i<=n; i++)
  13. #define MOD 2018
  14. #define LL long long
  15. #define ULL unsigned long long
  16. #define Pair pair<int, int>
  17. #define mem(a, b) memset(a, b, sizeof(a))
  18. #define _ ios_base::sync_with_stdio(0),cin.tie(0)
  19. //freopen("1.txt", "r", stdin);
  20. using namespace std;
  21. const int maxn = , INF = 0x7fffffff, maxm = 1e5+;
  22. int n, m;
  23. int f[maxn], ra[maxn], vis[maxn], edge[maxn];
  24.  
  25. struct node
  26. {
  27. int u, v, w;
  28. }Node[maxm];
  29.  
  30. bool cmp(node a, node b)
  31. {
  32. return a.w < b.w;
  33. }
  34. int find(int x)
  35. {
  36. return f[x] == x ? x : find(f[x]);
  37. }
  38.  
  39. int query(int x, int y)
  40. {
  41. int ans1 = , ans2 = -;
  42. int cur = x;
  43. while() //从x回溯到祖先
  44. {
  45. vis[cur] = ans1; //标记 从x到当前cur的最大权值的路段
  46. if(cur == f[cur]) break;
  47. ans1 = max(ans1, edge[cur]);
  48. cur = f[cur];
  49. }
  50. cur = y;
  51. while() //从y回溯到祖先
  52. {
  53. if(vis[cur] >= ) //直到遇到y和x的最近公共祖先
  54. {
  55. ans2 = max(ans2, vis[cur]);
  56. break;
  57. }
  58. ans2 = max(ans2, edge[cur]);
  59. cur = f[cur];
  60. }
  61. cur = x;
  62. while() //还原vis。。其实用一个memset就好了。。但时间复杂度竟然比用这个大10倍。。emm。。。
  63. {
  64. vis[cur] = -;
  65. if(cur == f[cur]) break;
  66. cur = f[cur];
  67. }
  68. return ans2;
  69. }
  70.  
  71. void init()
  72. {
  73. rap(i, , n)
  74. {
  75. f[i] = i;
  76. ra[i] =;
  77. }
  78. mem(vis, -);
  79. }
  80.  
  81. int main()
  82. {
  83. bool flag = true;
  84. while(~scanf("%d%d", &n, &m))
  85. {
  86. init();
  87. rap(i, , m)
  88. {
  89. scanf("%d%d%d", &Node[i].u, &Node[i].v, &Node[i].w);
  90. }
  91. sort(Node+, Node+m+, cmp);
  92. rap(i, , m) //按秩合并
  93. {
  94. int l = find(Node[i].u);
  95. int r = find(Node[i].v);
  96. if(l == r) continue;
  97. if(ra[l] <= ra[r]) f[l] = r, ra[r] = max(ra[r], ra[l] + ), edge[l] = Node[i].w; //儿子标记权值
  98. else f[r] = l, ra[l] = max(ra[l], ra[r] + ), edge[r] = Node[i].w;
  99. }
  100. if(flag) flag = false;
  101. else printf("\n");
  102. int q;
  103. scanf("%d", &q);
  104. rap(i, , q)
  105. {
  106. int u, v;
  107. scanf("%d%d", &u, &v);
  108. printf("%d\n", query(u, v));
  109. }
  110.  
  111. }
  112.  
  113. return ;
  114. }

Bond UVA - 11354(并查集按秩合并)的更多相关文章

  1. BZOJ4668: 冷战 [并查集 按秩合并]

    BZOJ4668: 冷战 题意: 给定 n 个点的图.动态的往图中加边,并且询问某两个点最早什 么时候联通,强制在线. 还可以这样乱搞 并查集按秩合并的好处: 深度不会超过\(O(\log n)\) ...

  2. 【bzoj4668】冷战 并查集按秩合并+朴素LCA

    题目描述 1946 年 3 月 5 日,英国前首相温斯顿·丘吉尔在美国富尔顿发表“铁幕演说”,正式拉开了冷战序幕. 美国和苏联同为世界上的“超级大国”,为了争夺世界霸权,两国及其盟国展开了数十年的斗争 ...

  3. Dash Speed【好题,分治,并查集按秩合并】

    Dash Speed Online Judge:NOIP2016十联测,Claris#2 T3 Label:好题,分治,并查集按秩合并,LCA 题目描述 比特山是比特镇的飙车圣地.在比特山上一共有 n ...

  4. 【BZOJ-4668】冷战 并查集 + 按秩合并 + 乱搞

    4668: 冷战 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 37  Solved: 24[Submit][Status][Discuss] Des ...

  5. BZOJ4025 二分图 分治 并查集 二分图 带权并查集按秩合并

    原文链接http://www.cnblogs.com/zhouzhendong/p/8683831.html 题目传送门 - BZOJ4025 题意 有$n$个点,有$m$条边.有$T$个时间段.其中 ...

  6. bzoj4668: 冷战 并查集按秩合并

    题目链接 bzoj4668: 冷战 题解 按秩合并并查集,每次增长都是小集合倍数的两倍以上,层数不超过logn 查询路径最大值 LCT同解 代码 #include<bits/stdc++.h&g ...

  7. 石头剪刀布(2019Wannafly winter camp day3 i) 带权并查集+按秩合并 好题

    题目传送门 思路: 按照题意描述,所有y挑战x的关系最后会形成一棵树的结构,n个人的总方案数是 3n 种,假设一个人被挑战(主场作战)a次,挑战别人(客场)b次,那么这个人存活到最后的方案数就是3n* ...

  8. HDU 1811 Rank of Tetris(并查集按秩合并+拓扑排序)

    Rank of Tetris Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) T ...

  9. bzoj 4668 冷战 —— 并查集按秩合并

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4668 按秩合并维护并查集的树结构,然后暴力找路径上的最大边权即可. 代码如下: #inclu ...

随机推荐

  1. Unity商店下载的文件保存路径?

    Win7系统: C:\Users\系统用户名\AppData\Roaming\Unity\Asset Store MAC:"~/Library/Unity/Asset\ Store" ...

  2. Maven学习(三)-----Maven本地资源库

    Maven本地资源库 Maven的本地资源库是用来存储所有项目的依赖关系(插件jar和其他文件,这些文件被Maven下载)到本地文件夹.很简单,当你建立一个Maven项目,所有相关文件将被存储在你的M ...

  3. katalon系列十一:Katalon Studio在Jenkins持续集成

    以下在WIN10上运行正常.安装准备:一.安装Katalon Studio二.安装Jenkins三.获取Katalon命令行运行命令:点击工具栏的‘Build CMD’按钮,选择测试集以及其他选项:选 ...

  4. Python环境搭建和pycharm安装

    Python环境搭建和pycharm安装 本人安装环境为Windows10系统,下载的Python版本为3.4社区版本,可参考 1.下载Python3.4版本 官网:https://www.pytho ...

  5. https双向认证网站搭建

    新建网站 在搭建网站证书之前,我们先搭建好我们的网站 1.网站基本搭建 为我们的项目新建一个网站,按照如下的步骤来 1,打开IIS,右键单击网站弹出菜单,选择网站(如图1.1.1) 图1.1.1 2, ...

  6. python sys模块使用详情

    python常用模块目录 sys模块提供了一系列有关Python运行环境的变量和函数.1.sys.argv可以用sys.argv获取当前正在执行的命令行参数的参数列表(list).变量解释sys.ar ...

  7. hbase优化操作与建议

    一.服务端调优 1.参数配置 1).hbase.regionserver.handler.count:该设置决定了处理RPC的线程数量,默认值是10,通常可以调大,比如:150,当请求内容很大(上MB ...

  8. python3【基础】-装饰器

    要理解充分理解python的装饰器,有充分理解下述三个知识点为前提: python作用域规则 函数即对象 闭包 一.python作用域规则: 首先介绍python中的作用域规则.python的作用域规 ...

  9. Beta发布——视频博客

    1.视频链接 视频上传至优酷自频道,地址链接:http://v.youku.com/v_show/id_XMzkzNzAxNDk2OA==.html?spm=a2hzp.8244740.0.0 2.视 ...

  10. 王者荣耀交流协会final发布WBS+PSP

    WBS: PSP: 时间为估计,大致精确. 类型 personal software process stages 预估时间 实际花费时间 planning 计划 4h 4h estimate 4h ...