BZOJ 1050 旅行comf
题目如下:
题目描述
给你一个无向图,N(N<=500)个顶点, M(M<=5000)条边,每条边有一个权值Vi(Vi<30000)。给你两个顶点S和T,求一条路径,使得路径上最大边和最小边的比值最小。如果S和T之间没有路径,输出”IMPOSSIBLE”,否则输出这个比值,如果需要,表示成一个既约分数。 备注: 两个顶点之间可能有多条路径。
输入
第一行包含两个正整数,N和M。 下来的M行每行包含三个正整数:x,y和v。表示景点x到景点y之间有一条双向公路,车辆必须以速度v在该公路上行驶。 最后一行包含两个正整数s,t,表示想知道从景点s到景点t最大最小速度比最小的路径。s和t不可能相同。
输出
如果景点s到景点t没有路径,输出“IMPOSSIBLE”。否则输出一个数,表示最小的速度比。如果需要,输出一个既约分数。
样例输入
【样例输入1】
4 2
1 2 1
3 4 2
1 4
【样例输入2】
3 3
1 2 10
1 2 5
2 3 8
1 3
【样例输入3】
3 2
1 2 2
2 3 4
1 3
样例输出
【样例输出1】
IMPOSSIBLE
【样例输出2】
5/4
【样例输出3】
2
用结构体存边:E[ ].fr(起始点) E[ ].to(指向点) E[ ].cost(权值)
此题用的是并查集来做的。首先对所有的边进行从小到大排序,定义ans1=inf为当前寻找到的最大边的最小值,ans2=1位当前的最小边。然后从小到大进行枚举(循环一:for(i=1;i<=m;i++))在循环一中建立以点为关键字的并查集数组。再进行第二重循环(for(int j=i;j<=n;j++)),该循环是从循环一进行到的边的编号开始,到最大的边,每添加一条边,将其开头和结尾添加在并查集中,再检测S和T的连通性即(if(find(S)==find(T)){ }),若联通则比较ans1/ans2与E[ j ].cost/E[ i ].cost的大小比较过程中可以交叉相乘,这样可以避免整除的问题。若新的比值更小则更新ans1和ans2的值并跳出循环二。若不连通依然比较ans1/ans2与E[ j ].cost/E[ i ].cost的大小,若新的比值小于原存的比值,则跳出循环二,因为循环二中E[j].cost是不断增大的。循环一结束后,主体就结束了,最后的输出一看就懂。
#include
<cstdio>
#include
<algorithm>#define inf 10000000
using namespace std;
struct edge{
int fr,to,cost;
};
edge E[];
inline int comp(edge a,edge b)
{
return a.cost<b.cost;
}
int m,n,s,t;
int fa[];
inline int find(int x)
{
if(fa[x]!=x) fa[x]=find(fa[x]);
return fa[x];
}
inline int gcd(int a,int b)//a>b
{
if(b==) return a;
return gcd(b,a%b);
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++)
scanf("%d%d%d",&E[i].fr,&E[i].to,&E[i].cost);
scanf("%d%d",&s,&t);
sort(E+,E+m+,comp);
int ans1=inf,ans2=;
for(int i=;i<=m;i++){
for(int j=;j<=n;j++)
fa[j]=j;
for(int j=i;j<=m;j++){
int f1=find(E[j].fr),f2=find(E[j].to);
fa[f1]=f2;
if(find(s)==find(t)){
if(E[i].cost*ans1>E[j].cost*ans2)
ans1=E[j].cost,ans2=E[i].cost;
break;
}
if(E[i].cost*ans1<E[j].cost*ans2) break;
}
}
int zdg=gcd(ans1,ans2);
if(ans1==inf) printf("IMPOSSIBLE");
else if(ans2!=zdg) printf("%d/%d",ans1/zdg,ans2/zdg);
else printf("%d",ans1/ans2);
}
BZOJ 1050 旅行comf的更多相关文章
- BZOJ 1050 旅行comf(枚举最小边-并查集)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1050 题意:给出一个带权图.求一条s到t的路径使得这条路径上最大最小边的比值最小? 思路 ...
- BZOJ 1050 旅行comf 并查集+枚举下界
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1050 题目大意: 给你一个无向图,N(N<=500)个顶点, M(M<=5 ...
- [BZOJ]1050 旅行comf(HAOI2006)
图论一直是小C的弱项,相比其它题型,图论的花样通常会更多一点,套路也更难捉摸. Description 给你一个无向图,N(N<=500)个顶点, M(M<=5000)条边,每条边有一个权 ...
- HYSBZ - 1050(旅行comf 并查集Java实现)
HYSBZ - 1050(旅行comf Java实现) 原题地址 解法:枚举每一条边,对于这条边,我们需要找到集合中和其值相差最小的最大边,这个集合是指与包括i边在内的ST联通集.对于这一要求,我们只 ...
- BZOJ 1050 旅行
Description 给你一个无向图,N(N<=500)个顶点, M(M<=5000)条边,每条边有一个权值Vi(Vi<30000).给你两个顶点S和T,求一条路径,使得路径上最大 ...
- BZOJ 1050 旅行(并查集)
很好的一道题.. 首先把边权排序.然后枚举最小的边,再依次添加不小于该边的边,直到s和t联通.用并查集维护即可. # include <cstdio> # include <cstr ...
- BZOJ [HAOI2006]旅行comf
题解:枚举最大边,然后对<=最大边的边做最大生成树,使最小边最大 #include<iostream> #include<cstdio> #include<cstr ...
- 【BZOJ】【1050】【HAOI2006】旅行comf
枚举/暴力/Kruskal orz……我sb了……其实是sb题<_< 有一道题问的是最小极差生成树……(不记得是什么名字了,就是求最大边权与最小边权差最小的生成树)做法是枚举最小边,然后k ...
- BZOJ 1050 [HAOI2006]旅行comf
1050: [HAOI2006]旅行comf Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1889 Solved: 976[Submit][Sta ...
随机推荐
- 线程中的异常处理——怪不得所有的语句,都用try catch包的严严实实,甚至每个小步骤还要单独包起来
答案是:在线程中出现没处理的异常时,线程会自动终止. 以前刚看到别人的代码时候,十分惊讶,try catch几乎成了最主要的语句了,还以为是因为代码风格,或者更严谨一些的原因.到今天才明白,原来还不是 ...
- ubuntu下编译内核驱动。
目的: 1. 驱动热身.网上有很多类似的文章可供参考. 2. 在操作系统中, 编写这个设备的驱动. 3. 为写qemu的watchdog驱动练手. 有朋友问make的 watchdog驱动 需要什么准 ...
- 织梦DEDECMS 首页列表页内容也时间日期调用标签
DEDECMS利用strftime()函数格式化时间的所有参数详解,包括年份日期进制.小时格式等,大家收藏吧,呵. 日期时间格式 (利用strftime()函数格式化时间)0 dedecms首页时间标 ...
- netbeans字体与颜色配置模板相关网站
NetBeans Themes -Color Schemes of the NetBeans IDE NetBeans ThemeBuilder
- error while loading shared libraries: libevent-1.x.so.1
安装完memcache后启动报错(error while loading shared libraries: libevent-1.x.so.1) 这是由于64位linux会去/usr/lib64目录 ...
- 从零开始学习UNITY3D(GUI篇 GUI.Window)
unity3d里面,也是包含window窗体的,下面看一下GUI.Window方法的详情 下面我们用代码实现一个通过开关显示窗体的隐藏和显示的功能,代码如下: public class windows ...
- How To Set Dark Theme in Visual Studio 2010
Want to use the visual studio color theme editor to set the dark theme or other themes? Below shows ...
- javascript 获取调用属性的对象
最近碰到一个javascript 的小问题,是和闭包有关的,来自cnode 论坛,很有意思. var o = (function() { var person = { name: 'Vincent', ...
- 【转】CoreData以及MagicalRecord (一)
先粗略的了解下CoreData中的一些核心概念 1. CoreData 的核心概念 先上两幅关键的概念图 (1)NSManagedObjectModel 托管对象模型(MOM)是描述应用程序的数据模型 ...
- 对于System.Net.Http的学习(一)——System.Net.Http 简介(转)
最新在学习System.Net.Http的知识,看到有篇文章写的十分详细,就想转过来,自己记录下.原地址是http://www.cnblogs.com/chillsrc/p/3439215.html? ...