题意分析

一开始想用最短路的方法维护,然后更新信息。失败了。
想了半天,发现跟lrj书上面的一道题很像,看边才5000,暴力可做。
对边排序后枚举sta,直到发现起点和重点在一个联通块里面,统计答案即可。

代码总览

#include<bits/stdc++.h>
using namespace std;
const int nmax = 5005;
typedef struct{int f, t, w;
}Edge;
Edge e[nmax];
int fa[505];
int n,m,s,t;
int mmin = 0x3f3f3f3f, mmax = -1,ansofmmin, ansofmmax;
bool cmp(Edge a, Edge b){return a.w > b.w;}
int findset(int x){int rt = x ,temp;while(rt != fa[rt]) rt = fa[rt];while(x != rt){temp = fa[x];fa[x] = rt;x = temp;}return rt;
}
bool unionset(int x, int y){x = findset(x);y = findset(y);if(x == y) return false;else{fa[x ] = y;return true;}
}
bool getans(){sort(e,e+m,cmp);bool isok = false;for(int j = 0;j<m-1;++j){for(int i = 1;i<=n;++i) fa[i] = i;mmin = 0x3f3f3f3f, mmax = -1;for(int i = j ;i<m;++i){if(unionset(e[i].f,e[i].t)){mmin = min(mmin,e[i].w);mmax = max(mmax,e[i].w);}if(findset(s) == findset(t)){isok = true;if(ansofmmax == 0  || 1.0 * ansofmmax / (1.0*ansofmmin) > mmax * 1.0 / (mmin * 1.0) ){ansofmmax = mmax;ansofmmin = mmin;}break;}}}return isok;
}
int main(){scanf("%d %d",&n,&m);for(int i = 0;i<m;++i) scanf("%d %d %d",&e[i].f,&e[i].t,&e[i].w);scanf("%d %d",&s,&t);bool isok = getans();if(!isok) printf("IMPOSSIBLE\n");else {int gcd = __gcd(ansofmmax,ansofmmin);if(ansofmmin / gcd == 1) printf("%d\n",ansofmmax/gcd);else printf("%d/%d\n",ansofmmax/gcd,ansofmmin/gcd);}return 0;
}

BZOJ1050 [HAOI2006]旅行comf (并查集)相关推荐

  1. bzoj1050 [HAOI2006]旅行comf(并查集)

    要求路径上最大边与最小边比值的最小值.我们知道,如果固定最小值,最大值越接近最小值,他们的比值越小.因此我们可以采用类似bzoj3454的方法,把所有边从小到大排序,枚举最小值,再枚举最大值,用并查集 ...

  2. BZOJ 1050 [HAOI2006]旅行comf(并查集)

    1050: [HAOI2006]旅行comf Description 给你一个无向图,N(N<=500)个顶点, M(M<=5000)条边,每条边有一个权值Vi(Vi<30000). ...

  3. HYSBZ - 1050(旅行comf 并查集Java实现)

    HYSBZ - 1050(旅行comf Java实现) 原题地址 解法:枚举每一条边,对于这条边,我们需要找到集合中和其值相差最小的最大边,这个集合是指与包括i边在内的ST联通集.对于这一要求,我们只 ...

  4. bzoj1050: [HAOI2006]旅行comf

    题面在这里 题意: 给一个图,每条边有边权. 给一个s和t,如果s和t之间没有路径输出IMPOSSIBLE,否则输出路径上最大边和最小边的比值的最小值. 做法: 你把边从小到大排序.那么对于一个最小值 ...

  5. BZOJ1050 [HAOI2006]旅行comf

    题目描述: 给你一个无向图,N(N<=500)个顶点, M(M<=5000)条边,每条边有一个权值Vi(Vi<30000).给你两个顶点S和T,求 一条路径,使得路径上最大边和最小边 ...

  6. BZOJ1050 [HAOI2006]旅行comf(Kruskal算法)

    SPFA是错误的:局部最优不能保证全局最优,因为要求的是比例最小,与路的长短无直接关系 可以设计m^2的算法: 先将边按长度排序,然后每次枚举最小边的长度w[i]作限定,依次加入更大的边, 当加到某条 ...

  7. [bzoj1050 HAOI2006] 旅行comf (kruskal)

    传送门 Description 给你一个无向图,N(N<=500)个顶点, M(M<=5000)条边,每条边有一个权值Vi(Vi<30000).给你两个顶点S和T,求 一条路径,使得 ...

  8. bzoj1050 [HAOI2006]旅行comf

    题目 枚举最小边,在用kruskal方法来让S与T,联通,这样比值就最优了.. #include<bits/stdc++.h> using namespace std; int f[501 ...

  9. [BZOJ1050] [HAOI2006] 旅行comf (Kruskal, LCT)

    Description 给你一个无向图,N(N<=500)个顶点, M(M<=5000)条边,每条边有一个权值Vi(Vi<30000).给你两个顶点S和T ,求一条路径,使得路径上最 ...

最新文章

  1. 使用Intellij中的Spring Initializr来快速构建Spring Boot/Cloud工程(十五)
  2. l开头的英文车标是什么车_L开头的英文车标叫什么车
  3. [Windows][C#][.NET][WPF]基于ArcFace2.0+红外双目摄像头的活体检测
  4. 我的世界 文件保存位置
  5. pytorch中的批量归一化BatchNorm1d和BatchNorm2d的用法、原理记录
  6. Linux服务-NFS服务部署
  7. React Native在Android当中实践(五)——常见问题
  8. 为什么 Netflix “永不宕机”?
  9. 怎样在WIN7系统下安装IIS和配置ASP
  10. Javascript第二章中switch结构及与if的区别第二课
  11. 能源管理可视化破冰而出,数字孪生打破传统运维僵局
  12. GIS空间分析 栅格数据分析3 可达性分析
  13. python生成热力图_pyHeatMap生成热力图
  14. 最近刷爆朋友圈的“召唤神龙”
  15. 百度网盘会员怎么购买最便宜
  16. 小米手机小技巧:小米手机心率测试
  17. 吴恩达深度学习相关资源下载地址(蓝奏云)
  18. HDU 5183 Negative and Positive (NP) (set + 读入外挂 乱搞)
  19. 优达(Udacity)smartcab
  20. google colab云服务器使用

热门文章

  1. 如何通过数据包套接字攻击Linux内核?
  2. 学习到第一个国庆的感想
  3. 台式计算机默认关机变注销,win10系统关机变注销的解决方案
  4. 数据嗨客 | 第6期:不平衡数据处理
  5. 数据可视化分析框架 amCharts 5
  6. 学数学——林群讲的东西
  7. 上海 -》 张家界 旅行 计划10.1
  8. java数组位置_java数组中如何查找元素的位置?
  9. 英语六级试卷软件测试,大学英语六级考试预测试卷以及答案
  10. 读书笔记:聪明人用方格纸