题面在这里

题意:

给一个图,每条边有边权。
给一个s和t,如果s和t之间没有路径输出IMPOSSIBLE,否则输出路径上最大边和最小边的比值的最小值。

做法:

你把边从小到大排序。那么对于一个最小值x,我们从x开始从小到大加边,并查集维护,直到s和t联通,那条最后一条边权比上x就是这个答案。
于是我们暴力枚举最小边是什么,每次更新答案即可。

代码:

/*************************************************************Problem: bzoj 1050 [HAOI2006]旅行comfUser: fengyuanLanguage: C++Result: AcceptedTime: 1340 msMemory: 1372 kbSubmit_Time: 2018-01-12 18:17:46
*************************************************************/#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstdlib>
#include<cctype>
using namespace std;const int N = 5010;
int n, m, s, t;
int fa[N];
struct Node{int x, y, v;
}e[N];const bool cmp(const Node &x, const Node &y) { return x.v < y.v; }
inline int getFa(int x) { return fa[x] == x ? x : fa[x] = getFa(fa[x]); }
inline int gcd(int a, int b) { return (!b)?a:gcd(b, a%b); }
int main()
{scanf("%d%d", &n, &m);for(int i = 1; i <= m; i ++) scanf("%d%d%d", &e[i].x, &e[i].y, &e[i].v);scanf("%d%d", &s, &t);sort(e+1, e+1+m, cmp); int mx = 0, mi = 0;for(int i = 1; i <= m; i ++) {for(int j = 1; j <= n; j ++) fa[j] = j;int mxx = 0, mii = 0;for(int j = i; j <= m; j ++) {int fx = getFa(e[j].x), fy = getFa(e[j].y);if(fx != fy) fa[fx] = fy;if(getFa(s) == getFa(t)) { mxx = e[j].v; mii = e[i].v; break; }}if(mii) {if(!mi) { mx = mxx; mi = mii; }else if(mxx*mi < mx*mii) { mx = mxx; mi = mii; }}}if(!mx) puts("IMPOSSIBLE");else {int g = gcd(mx, mi);if(mi == g) printf("%d\n", mx/g);else printf("%d/%d\n", mx/g, mi/g);}return 0;
}

bzoj1050: [HAOI2006]旅行comf相关推荐

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

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

  2. BZOJ1050 [HAOI2006]旅行comf

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

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

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

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

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

  5. bzoj1050 [HAOI2006]旅行comf

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

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

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

  7. BZOJ1050 HAOI2006 旅行comf 生成树+枚举

    题意:给订一张无向图,求一条S到T的路径,使得路径上的最大边权与最小边权的比值最小 题解:将边由小到大排序,暴力枚举最小边,然后借鉴Kruskal的思想,由小到大加入每一条大于初始边的边,检验S与T是 ...

  8. BZOJ1050 [HAOI2006]旅行comf (并查集)

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

  9. 【bzoj1050】[HAOI2006]旅行comf

    1050: [HAOI2006]旅行comf Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 2813  Solved: 1534 [Submit][ ...

最新文章

  1. Mysql 755和750权限,chmod 755 究竟是什么鬼?
  2. Cassandra 原理介绍
  3. 对C#面向对象三大特性的一点总结
  4. 【SIP协议】学习初学笔记
  5. 农村民间借贷一分利息,有借条受法律保护吗?
  6. 外国经典儿童读物合集pdf_帮助父母在线购买儿童读物–用户体验案例研究
  7. 【C++深度剖析教程22】继承的概念和意义
  8. DiQuick Web UI 框架 V1.3 正式版发布
  9. Python之网络爬虫(爬虫基本认知、网络爬虫之路)
  10. 征信报告上那些你不知道的事
  11. 医用口罩、N95、KN95口罩的区别
  12. 浅谈Cglib、Jdk以及ProxyFactory实现动态代理上的区别
  13. R语言自定义设置使用内存的大小、可以使用的内存范围?
  14. PDF怎样免费转换成word?无须借助软件,网页就能轻松实现。
  15. java 麻将小程序_麻将小程序麻将这么玩
  16. 推荐中商品的热度时间衰减降权:牛顿冷却定律;贝叶斯平均
  17. 本周开课 | 10年运营专家亲授,掌握9类运营的核心技能,强化运营实力
  18. ffmpeg下载安装,以及springboot 整合视频点播学习
  19. X的学习日记LinuxOS篇
  20. 【大数据算法】:apriori算法详解,非常清晰

热门文章

  1. [数独进阶技巧]区块摒除法
  2. RCV 接收指令例程
  3. java获取date的时分秒_java Date简单的 获得时分秒代码
  4. android mvp mvvm ppt,Android中MVC MVP MVVM模式
  5. IP地址和物理地址的区别和联系
  6. pycharm 中 ‘unicodeescape’ codec can’t decode bytes in position XXX: trun错误解决方案背景描述...
  7. 用showdown给HTML网页插入markdown笔记
  8. 测试管理005:面对用户反馈的缺陷,测试人员能做些什么?
  9. pytorch 目标检测数据增强 详细讲解
  10. 勇闯迷塔小游戏(c++) 3.17更新