hdu 1598 find the most comfortable road 枚举+并查集
2016-05-13 21:48
253 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1598
题意:给出n个城市,m条路径,若路径中的最大速度和最小速度差越小则越舒适,求给定节点的最小差。
先对路径按速度排序,枚举路径作为最小速度,依次增加路径,直到两个城市连通,即可得到当前最小速度下最小差。取这些最小差的最小值即可。
题意:给出n个城市,m条路径,若路径中的最大速度和最小速度差越小则越舒适,求给定节点的最小差。
先对路径按速度排序,枚举路径作为最小速度,依次增加路径,直到两个城市连通,即可得到当前最小速度下最小差。取这些最小差的最小值即可。
#include <iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #define N 1100 #define INF 0x7ffffff using namespace std; struct node { int u,v,w; }e ; int pre ; bool cmp(node a,node b) { return a.w<b.w; } int findset(int v) { int t1,t2=v; while(v!=pre[v]) v=pre[v]; while(t2!=v) { t1=pre[t2]; pre[t2]=v; t2=t1; } return v; } void unions(int u,int v) { int t1=findset(u); int t2=findset(v); if(t1!=t2) pre[t1]=t2; } int main() { int n,m,u,v,q; while(~scanf("%d%d",&n,&m)) { int maxw=0; for(int i=0;i<m;i++) scanf("%d%d%d",&e[i].u,&e[i].v,&e[i].w); sort(e,e+m,cmp); cin>>q; while(q--) { cin>>u>>v; int ans=INF; for(int i=0;i<m;i++) { for(int i=1;i<=n;i++) pre[i]=i; for(int j=i;j<m;j++) { unions(e[j].u,e[j].v); findset(u); findset(v); if(pre[u]==pre[v]) { ans=min(ans,e[j].w-e[i].w); break; } } } cout<<(ans==INF?-1:ans)<<endl; } } }
相关文章推荐
- 练习打字第九天!
- 安卓3个练习题
- Find the Duplicate Number
- [iOS]从URL远程请求图片
- linux:error while loading shared libraries xx.so
- 进度条
- 《宗庆后:万有引力原理》:娃哈哈官方口径,可以作为了解娃哈哈及其相关领域的重要参考资料。三星推荐
- 微信课堂的初步确立
- 第十一周项目4—教师兼干部类
- SpringMVC源代码学习(三)DispatcherServlet
- MySql获取数据库大小
- 1. Two Sum
- python urllib 和urllib2的区别
- LintCode 加油站
- Android studio -SVN 的使用
- 团队冲刺第一天
- 解决Windows挂起状态
- fragment和activity通信问题
- 如何搞定毕业论文查重
- phpmyadmin 提示没有安装mbstring的问题解决