Bond UVA - 11354(并查集按秩合并)
题意:
给你一张无向图,然后有若干组询问,让你输出a->b的最小瓶颈路。
解析:
应该都想过用prime的次小生成树做。。但二维数组开不了那么大。。所以只能用kruskal了。。。。
- #include <iostream>
- #include <cstdio>
- #include <sstream>
- #include <cstring>
- #include <map>
- #include <set>
- #include <vector>
- #include <stack>
- #include <queue>
- #include <algorithm>
- #include <cmath>
- #define rap(i, a, n) for(int i=a; i<=n; i++)
- #define MOD 2018
- #define LL long long
- #define ULL unsigned long long
- #define Pair pair<int, int>
- #define mem(a, b) memset(a, b, sizeof(a))
- #define _ ios_base::sync_with_stdio(0),cin.tie(0)
- //freopen("1.txt", "r", stdin);
- using namespace std;
- const int maxn = , INF = 0x7fffffff, maxm = 1e5+;
- int n, m;
- int f[maxn], ra[maxn], vis[maxn], edge[maxn];
- struct node
- {
- int u, v, w;
- }Node[maxm];
- bool cmp(node a, node b)
- {
- return a.w < b.w;
- }
- int find(int x)
- {
- return f[x] == x ? x : find(f[x]);
- }
- int query(int x, int y)
- {
- int ans1 = , ans2 = -;
- int cur = x;
- while() //从x回溯到祖先
- {
- vis[cur] = ans1; //标记 从x到当前cur的最大权值的路段
- if(cur == f[cur]) break;
- ans1 = max(ans1, edge[cur]);
- cur = f[cur];
- }
- cur = y;
- while() //从y回溯到祖先
- {
- if(vis[cur] >= ) //直到遇到y和x的最近公共祖先
- {
- ans2 = max(ans2, vis[cur]);
- break;
- }
- ans2 = max(ans2, edge[cur]);
- cur = f[cur];
- }
- cur = x;
- while() //还原vis。。其实用一个memset就好了。。但时间复杂度竟然比用这个大10倍。。emm。。。
- {
- vis[cur] = -;
- if(cur == f[cur]) break;
- cur = f[cur];
- }
- return ans2;
- }
- void init()
- {
- rap(i, , n)
- {
- f[i] = i;
- ra[i] =;
- }
- mem(vis, -);
- }
- int main()
- {
- bool flag = true;
- while(~scanf("%d%d", &n, &m))
- {
- init();
- rap(i, , m)
- {
- scanf("%d%d%d", &Node[i].u, &Node[i].v, &Node[i].w);
- }
- sort(Node+, Node+m+, cmp);
- rap(i, , m) //按秩合并
- {
- int l = find(Node[i].u);
- int r = find(Node[i].v);
- if(l == r) continue;
- if(ra[l] <= ra[r]) f[l] = r, ra[r] = max(ra[r], ra[l] + ), edge[l] = Node[i].w; //儿子标记权值
- else f[r] = l, ra[l] = max(ra[l], ra[r] + ), edge[r] = Node[i].w;
- }
- if(flag) flag = false;
- else printf("\n");
- int q;
- scanf("%d", &q);
- rap(i, , q)
- {
- int u, v;
- scanf("%d%d", &u, &v);
- printf("%d\n", query(u, v));
- }
- }
- return ;
- }
Bond UVA - 11354(并查集按秩合并)的更多相关文章
- BZOJ4668: 冷战 [并查集 按秩合并]
BZOJ4668: 冷战 题意: 给定 n 个点的图.动态的往图中加边,并且询问某两个点最早什 么时候联通,强制在线. 还可以这样乱搞 并查集按秩合并的好处: 深度不会超过\(O(\log n)\) ...
- 【bzoj4668】冷战 并查集按秩合并+朴素LCA
题目描述 1946 年 3 月 5 日,英国前首相温斯顿·丘吉尔在美国富尔顿发表“铁幕演说”,正式拉开了冷战序幕. 美国和苏联同为世界上的“超级大国”,为了争夺世界霸权,两国及其盟国展开了数十年的斗争 ...
- Dash Speed【好题,分治,并查集按秩合并】
Dash Speed Online Judge:NOIP2016十联测,Claris#2 T3 Label:好题,分治,并查集按秩合并,LCA 题目描述 比特山是比特镇的飙车圣地.在比特山上一共有 n ...
- 【BZOJ-4668】冷战 并查集 + 按秩合并 + 乱搞
4668: 冷战 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 37 Solved: 24[Submit][Status][Discuss] Des ...
- BZOJ4025 二分图 分治 并查集 二分图 带权并查集按秩合并
原文链接http://www.cnblogs.com/zhouzhendong/p/8683831.html 题目传送门 - BZOJ4025 题意 有$n$个点,有$m$条边.有$T$个时间段.其中 ...
- bzoj4668: 冷战 并查集按秩合并
题目链接 bzoj4668: 冷战 题解 按秩合并并查集,每次增长都是小集合倍数的两倍以上,层数不超过logn 查询路径最大值 LCT同解 代码 #include<bits/stdc++.h&g ...
- 石头剪刀布(2019Wannafly winter camp day3 i) 带权并查集+按秩合并 好题
题目传送门 思路: 按照题意描述,所有y挑战x的关系最后会形成一棵树的结构,n个人的总方案数是 3n 种,假设一个人被挑战(主场作战)a次,挑战别人(客场)b次,那么这个人存活到最后的方案数就是3n* ...
- HDU 1811 Rank of Tetris(并查集按秩合并+拓扑排序)
Rank of Tetris Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
- bzoj 4668 冷战 —— 并查集按秩合并
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4668 按秩合并维护并查集的树结构,然后暴力找路径上的最大边权即可. 代码如下: #inclu ...
随机推荐
- LAUNCHXL-28379D入门学习-第一篇
1. 首先安装controlSUITE或者C2000ware软件,TI官网下载,安装后包括C2000的函数库和例程之类的,还可以和CCS搭配使用.controlSUITE安装完之后大约4个G,所以我安 ...
- Django模型层:单表操作
一 ORM简介 查询数据层次图解:如果操作mysql,ORM是在pymysq之上又进行了一层封装
- Android开源的精美日历控件,热插拔设计的万能自定义UI
Android开源的精美日历控件,热插拔设计的万能自定义UI UI框架应该逻辑与界面实现分离,该日历控件使用了热插拔的设计 ,简单几步即可实现你需要的UI效果,热插拔的思想是你提供你的实现,我提供我的 ...
- ffmpeg 踩坑实录 近期使用总结(三)
一.背景介绍 将ffmpeg运用到项目上已经有一段时间了,趁现在有空赶紧记下来. 二.技术点总结 2.1 实现方式 项目里面主要运用的形式是,在java端,调用操作系统的方法,并执行切片命令. ...
- JMeter自学笔记1-环境安装
一.写在前面的话: Jmeter是一款优秀的开源测试工具, 是每位测试工程师进阶过程中,需要熟悉并掌握的一款测试工具,熟练使用Jmeter能大大提高工作效率. Jmeter环境安装需要依赖JDK,所以 ...
- POJ 3278 Catch That Cow (附有Runtime Error和Wrong Answer的常见原因)
题目链接:http://poj.org/problem?id=3278 Catch That Cow Time Limit: 2000MS Memory Limit: 65536K Total S ...
- phpcms单页顶级栏目默认打开第一个子栏目方法
首先phpcms单页如过下面有子栏目,那么当前栏目是不能被编辑内容的,且访问后是没有内容的,首先不知道这是不是产品设计的一个缺陷,但是在使用过程中确实在后台也没有找到其他的对应解决办法,刚好在某QQ群 ...
- hdfs遍历文件方法
import org.apache.commons.lang.StringUtils; import org.apache.hadoop.conf.Configuration; import org. ...
- Matlab中 .' 的作用。
Syntax B = A.' B = transpose(A) Description B = A.' returns the nonconjugate transpose of A, that ...
- Thymeleaf教程【转】
作者:不做浮躁的人 转自:http://www.blogjava.net/bjwulin/archive/2013/02/07/395234.html PS:其他推荐教程地址 http://blog. ...