HDU1598 并查集+枚举
http://acm.hdu.edu.cn/showproblem.php?pid=1598
题意:给出一个无向图,每条边代表两点之间的同行速度,给出起点和终点,求出从起点到终点的路径的最小速度差。若无法从起点到终点,则输出-1。
思路:存储每条边的信息,按速度升序排序。按速度从小到大枚举边,然后依次往构建的树中添加边直到起点和终点在同一集合中。此时,最初添加的边的速度与最后添加的边的速度差为当前构造的路径的速度差,每次枚举结束后更新速度差。第一次枚举结束后若发现无法从起点到达终点,那么可以直接停止枚举。(第一次无法成功时,所有边均已添加到路径中,之后无论如何枚举也不可能构造出从起点到达终点的路径)代码从形式上来看很像kruskal,但并没有构建出最小生成树。所以我觉得真要分类的话,分到并查集中或许会好一些。(本来kruskal就依靠并查集实现)
#include<bits/stdc++.h> using namespace std;const int INF = 0x3f3f3f3f; int n, m, pa[205]; struct Edge {int u,v,val; }eg[1005];bool cmp(Edge a, Edge b) {return a.val < b.val; }void init() {for (int i=1;i<=n;i++)pa[i] = i; }int fnd(int x) {if (pa[x]!=x) pa[x] = fnd(pa[x]);return pa[x]; }void uni(int x,int y) {int tx = fnd(x) , ty = fnd(y);if (tx!=ty)pa[tx] = ty; }int main() {int q,st,ed; //询问数量,起点,终点while (scanf("%d %d",&n,&m)==2){for (int i=0;i<m;i++){int u,v,val; //边的两个点,边上的速度scanf("%d %d %d",&u,&v,&val);eg[i].v = v; eg[i].u = u; eg[i].val = val;}int ans = INF;scanf("%d",&q);sort(eg,eg+m,cmp); //将边按速度升序排序while (q--){scanf("%d %d",&st,&ed);ans = INF;//将ans置为一个较大值,若之后ans不改变说明无法找到从起点到终点的路径for (int i=0;i<m;i++){init();for (int j=i;j<m;j++){uni(eg[j].v,eg[j].u);if (fnd(st) == fnd(ed))ans = min(ans,eg[j].val - eg[i].val); //起点与终点相连,更新ans }if (ans==INF) break; //可以结束枚举 }if (ans == INF) printf("-1\n");else printf("%d\n",ans);}}return 0; }
转载于:https://www.cnblogs.com/bdNestInLastation/p/5749322.html
HDU1598 并查集+枚举相关推荐
- poj2912(种类并查集+枚举)
题目:http://poj.org/problem?id=2912 题意:n个人进行m轮剪刀石头布游戏(0<n<=500,0<=m<=2000),接下来m行形如x, y, ch ...
- poj2912(带权并查集+枚举)
题目链接:http://poj.org/problem?id=2912 题意:给n个人,m组关系,玩石头剪刀布的游戏,n个人中除一个人judge以外,其他人属于3个group(即石头.剪刀.布),他们 ...
- N - 嘤嘤嘤 (并查集+枚举)
Our lovely KK has a difficult Social problem. A big earthquake happened in his area. N(2≤N≤2000)N(2≤ ...
- pku2192(并查集+枚举)
这题的话,跟食物链很相识,也是有三类,所以那个公式的话,还是一样的 题意是要找出里面唯一的一个judge,judge的特别就是他没有固定属于哪一类,所以只能枚举每一个人当judge的情况了 满足是唯一 ...
- HDU-5624 -KK's Reconstruction(并查集+枚举)
Problem Description Our lovely KK has a difficult Social problem. A big earthquake happened in his a ...
- hdu 1598 find the most comfortable road (并查集+枚举)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1598 find the most comfortable road Time Limit: 1000/ ...
- BZOJ 1050: [HAOI2006]旅行comf(枚举+并查集)
[HAOI2006]旅行comf Description 给你一个无向图,N(N<=500)个顶点, M(M<=5000)条边,每条边有一个权值Vi(Vi<30000).给你两个顶点 ...
- hdu1589(枚举+并查集)
find the most comfortable road Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K ...
- Rochambeau POJ - 2912 (枚举和加权并查集+路径压缩)找唯一裁判
题意:有n个人玩石头剪刀布,有且只有一个裁判.除了裁判每个人的出拳形式都是一样的. a<b表示b打败a,a=b表示a和b出拳一样,平手.a>b表示a打败b. 给出m个回合的游戏结果,问能否 ...
- POJ 1944 Fiber Communications (枚举 + 并查集 OR 线段树)
题意 在一个有N(1 ≤ N ≤ 1,000)个点环形图上有P(1 ≤ P ≤ 10,000)对点需要连接.连接只能连接环上相邻的点.问至少需要连接几条边. 思路 突破点在于最后的结果一定不是一个环! ...
最新文章
- Win10-OpenCV双目相机开发
- 告别深度学习炼丹术!谷歌大脑提出“权重无关”神经网络
- PyTorch or TensorFlow?强力推荐PyTorch不是没有理由的!一文学透pytorch!
- Qt中另一种创建线程的方式
- 特征工程(part3)--扁平化、过滤和分块
- bat入门-----依据ping状态判断ip【第一天】
- 大学生应当趁早谋划未来(二)--给表弟的建议
- EMR on ACK 全新发布,助力企业高效构建大数据平台
- OO Summary Ⅲ
- 系统学习机器学习之神经网络(十) --BAM网络
- C++简介(3)--引用和指针
- viper4android md,【xposed】微信主题模块(MDWechat)v3.5.0
- NOIP蒟蒻组初赛攻略
- 无需密码自己卸载深信服EDR软件
- office精英俱乐部_开放组织读书俱乐部:收回精英制
- Exception:org.eclipse.m2e.wtp.MarkedException: Unable to configure OHBC
- Linux内核cgroup使用介绍
- 内网穿透-Frp(1)使用樱花Frp(Sakura Frp)进行免费的内网穿透操作步骤
- 贝壳找房值百亿美元吗?
- 浅谈AutoCAD下载安装的那些三两事!
热门文章
- Windows7与Window2008 64位IIS7上面配置操作Excel
- (原創) 如何控制DE2 VGA輸出時某座標的顏色? (IC Design) (DE2) (Quartus II)
- 基于VUE,VUX组件开发的网易新闻页面搭建过程
- iOS 添加PCH文件
- 扎克伯格再售9500万美元股票 向裸捐目标迈近一步
- JavaScript面向对象详解
- TypeScript手册翻译系列1-基础类型
- 浅析:提升手机APP开发和运营成效的经验分享
- Python 高级--面向对象
- 3.SOA架构:服务和微服务分析及设计--- 理解服务与微服务的层次