题目如下:

题目描述

给你一个无向图,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<iostream>

#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的更多相关文章

  1. BZOJ 1050 旅行comf(枚举最小边-并查集)

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1050 题意:给出一个带权图.求一条s到t的路径使得这条路径上最大最小边的比值最小? 思路 ...

  2. BZOJ 1050 旅行comf 并查集+枚举下界

    题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1050 题目大意: 给你一个无向图,N(N<=500)个顶点, M(M<=5 ...

  3. [BZOJ]1050 旅行comf(HAOI2006)

    图论一直是小C的弱项,相比其它题型,图论的花样通常会更多一点,套路也更难捉摸. Description 给你一个无向图,N(N<=500)个顶点, M(M<=5000)条边,每条边有一个权 ...

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

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

  5. BZOJ 1050 旅行

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

  6. BZOJ 1050 旅行(并查集)

    很好的一道题.. 首先把边权排序.然后枚举最小的边,再依次添加不小于该边的边,直到s和t联通.用并查集维护即可. # include <cstdio> # include <cstr ...

  7. BZOJ [HAOI2006]旅行comf

    题解:枚举最大边,然后对<=最大边的边做最大生成树,使最小边最大 #include<iostream> #include<cstdio> #include<cstr ...

  8. 【BZOJ】【1050】【HAOI2006】旅行comf

    枚举/暴力/Kruskal orz……我sb了……其实是sb题<_< 有一道题问的是最小极差生成树……(不记得是什么名字了,就是求最大边权与最小边权差最小的生成树)做法是枚举最小边,然后k ...

  9. BZOJ 1050 [HAOI2006]旅行comf

    1050: [HAOI2006]旅行comf Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1889  Solved: 976[Submit][Sta ...

随机推荐

  1. 线程中的异常处理——怪不得所有的语句,都用try catch包的严严实实,甚至每个小步骤还要单独包起来

    答案是:在线程中出现没处理的异常时,线程会自动终止. 以前刚看到别人的代码时候,十分惊讶,try catch几乎成了最主要的语句了,还以为是因为代码风格,或者更严谨一些的原因.到今天才明白,原来还不是 ...

  2. ubuntu下编译内核驱动。

    目的: 1. 驱动热身.网上有很多类似的文章可供参考. 2. 在操作系统中, 编写这个设备的驱动. 3. 为写qemu的watchdog驱动练手. 有朋友问make的 watchdog驱动 需要什么准 ...

  3. 织梦DEDECMS 首页列表页内容也时间日期调用标签

    DEDECMS利用strftime()函数格式化时间的所有参数详解,包括年份日期进制.小时格式等,大家收藏吧,呵. 日期时间格式 (利用strftime()函数格式化时间)0 dedecms首页时间标 ...

  4. netbeans字体与颜色配置模板相关网站

    NetBeans Themes -Color Schemes of the NetBeans IDE NetBeans ThemeBuilder

  5. 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目录 ...

  6. 从零开始学习UNITY3D(GUI篇 GUI.Window)

    unity3d里面,也是包含window窗体的,下面看一下GUI.Window方法的详情 下面我们用代码实现一个通过开关显示窗体的隐藏和显示的功能,代码如下: public class windows ...

  7. 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 ...

  8. javascript 获取调用属性的对象

    最近碰到一个javascript 的小问题,是和闭包有关的,来自cnode 论坛,很有意思. var o = (function() { var person = { name: 'Vincent', ...

  9. 【转】CoreData以及MagicalRecord (一)

    先粗略的了解下CoreData中的一些核心概念 1. CoreData 的核心概念 先上两幅关键的概念图 (1)NSManagedObjectModel 托管对象模型(MOM)是描述应用程序的数据模型 ...

  10. 对于System.Net.Http的学习(一)——System.Net.Http 简介(转)

    最新在学习System.Net.Http的知识,看到有篇文章写的十分详细,就想转过来,自己记录下.原地址是http://www.cnblogs.com/chillsrc/p/3439215.html? ...