图论500题 ---- (枚举+并查集)求图上路径权值差值最小 HDU find the most comfortable road
题目链接
解题思路:
- 对于两个点的路径假设我们把边按照边权进行排序那么,再把边依次加入图中判断两点的联通性,那么这个边就是两个点联通的最小的最大值,但是最大的最小值怎么找?
- 因为我们是把边权按照从小到大进行排序那么我们可以枚举从第iii条边开始加边,加到第jjj条边的时候u和v联通了u和v联通了u和v联通了,那么答案就按e[j].w−e[i].we[j].w-e[i].we[j].w−e[i].w
- 对上取minminmin即可
#include <bits/stdc++.h>
#define mid ((l + r) >> 1)
#define Lson rt << 1, l , mid
#define Rson rt << 1|1, mid + 1, r
#define ms(a,al) memset(a,al,sizeof(a))
#define log2(a) log(a)/log(2)
#define lowbit(x) ((-x) & x)
#define IOS std::ios::sync_with_stdio(0); cin.tie(0); cout.tie(0)
#define INF 0x3f3f3f3f
#define LLF 0x3f3f3f3f3f3f3f3f
#define f first
#define s second
#define endl '\n'
using namespace std;
const int N = 2e6 + 10, mod = 1e9 + 9;
const int maxn = 500010;
const long double eps = 1e-5;
const int EPS = 500 * 500;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> PII;
typedef pair<ll,ll> PLL;
typedef pair<double,double> PDD;
template<typename T> void read(T &x)
{x = 0;char ch = getchar();ll f = 1;while(!isdigit(ch)){if(ch == '-')f*=-1;ch=getchar();}while(isdigit(ch)){x = x*10+ch-48;ch=getchar();}x*=f;
}
template<typename T, typename... Args> void read(T &first, Args& ... args)
{read(first);read(args...);
}
struct edge {int u, v, w;bool operator < (const edge & a) const {return w < a.w;}
}e[maxn];
int fa[maxn];
inline int find(int x) {return fa[x] == x ? x : fa[x] = find(fa[x]);
}
int main() {IOS;int n, m;while(cin >> n >> m) {for(int i = 1; i <= m; ++ i)cin >> e[i].u >> e[i].v >> e[i].w;sort(e+1,e+1+m);int q;cin >> q;while(q --) {int u, v;cin >> u >> v;int ans = INF;for(int i = 1; i <= m; ++ i) {for(int j = 1; j <= n; ++ j) fa[j] = j;for(int j = i; j <= m; ++ j) {int fu = find(e[j].u), fv = find(e[j].v);if(fu != fv) fa[fu] = fv;if(find(u) == find(v)) {ans = min(ans,e[j].w-e[i].w);break;}}}if(ans == INF) ans = -1;cout << ans << "\n";}}}
图论500题 ---- (枚举+并查集)求图上路径权值差值最小 HDU find the most comfortable road相关推荐
- 图论500题 ---- 枚举(最短路上的边)+最短路 删掉任意一条边的最长最短路 HDU1595
题目链接 题目大意: 有一城市,这个城市有nnn个地点和mmm条连接他们的路,点的编号是从111到nnn,小X住在111,他想去nnn. 但是最近正在维修公路,也就是说这mmm条路有且只有一条是坏的, ...
- 图论:并查集求最小环
图论:并查集求最小环 概念: 图.路.环: 一个有向图由G=(N,A)表示,其中N表示节点集,A表示边集边(i,j)为一有序对,i为出发节点,j为终止节点.在无向图中(i,j)与(j,i)一致. 路是 ...
- 【转载】图论 500题——主要为hdu/poj/zoj
转自--http://blog.csdn.net/qwe20060514/article/details/8112550 =============================以下是最小生成树+并 ...
- 图论500题 慢慢写
题目来源 https://blog.csdn.net/ffq5050139/article/details/7832991 这篇博客用来记录自己刷的图论题 先占个坑 所有题目都来自上面的链接 会慢慢更 ...
- 【算法训练营】 - ⑩ 并查集与图
[算法训练营] - ⑩ 并查集与图 并查集 并查集特征 并查集的优化 图 图结构的表达 图的面试题如何搞定? 图的数据结构 点 边 图 生成图 图算法 广度优先遍历 深度优先遍历 图的拓扑排序算法 最 ...
- 图论500题 ---- 并查集求路径上最大值最小不超过K的点对数 HDU Portal
题目链接 题目大意: 就给你一个图,qqq次询问,问你这个图上有多少对点之间的所以路径上的最大值的最小值不超过kkk? 解题思路: 首先我们知道这本质上就是求两个点联通的路径上的最大值最小是多少? 那 ...
- BZOJ 1050: [HAOI2006]旅行comf(枚举+并查集)
[HAOI2006]旅行comf Description 给你一个无向图,N(N<=500)个顶点, M(M<=5000)条边,每条边有一个权值Vi(Vi<30000).给你两个顶点 ...
- ssl1615-Frogger【图论,最小生成树,并查集】
题目 给一个无向图,要求从点1到点2的一条路,要求这条路上的边的最大值尽量小. 输入输入 多组数据,每个数据n+1行,分别是n和点的坐标 2 0 0 3 4 3 17 4 19 4 18 5 0 输出 ...
- 1114. Family Property (25)-PAT甲级真题(并查集)
This time, you are supposed to help us collect the data for family-owned property. Given each person ...
最新文章
- ML基石_12_NonLinearTransformation
- Elasticsearch常用操作:集群管理篇
- MXNET学习笔记(二):模型的保存与加载
- Perl中state()和localtime()函数
- discuz如何去掉论坛的网页后缀名称forum.php
- 第三次学JAVA再学不好就吃翔(part19)--二维数组
- 使用C#快速生成顺序GUID
- C# 简单方式解压Zip文件/使用VS2019自带功能
- android gps 案例_GPS学习要点10
- python画好看的图-python如何画出漂亮的地图?
- 远离魔咒,见微知著,打造崭新的罗浮宫
- BPSK调制解调matlab仿真
- Win7小工具“美女报时”,搜道版,v1.0.4.0
- Excel筛选出符合自己条件的数据
- 7.8 Introduce Local Extension 引入本地扩展
- 2019北京大学研究生推免上机考试
- Word VBA自动排版(5)- 专利具体实施方式批量增加附图标记
- 【零基础学JS -4】深入剖析script标签
- txt转shp,省标格式txt格式转shp批量转换
- 怎样不改变图片像素把图片压缩到20KB以内?