bzoj1050【HAOI2006】旅行comf
1050: [HAOI2006]旅行comf
Time Limit: 10 Sec Memory Limit: 162 MB id=1050" style="color:blue; text-decoration:none">Status
Submit: 2205 Solved: 1174
[Submit][
Description
给你一个无向图,N(N<=500)个顶点, M(M<=5000)条边。每条边有一个权值Vi(Vi<30000)。
给你两个顶点S和T,求一条路径,使得路径上最大边和最小边的比值最小。假设S和T之间没有路径,输出”IMPOSSIBLE”,否则输出这个比值。假设须要,表示成一个既约分数。 备注: 两个顶点之间可能有多条路径。
Input
第一行包括两个正整数,N和M。 下来的M行每行包括三个正整数:x,y和v。
表示景点x到景点y之间有一条双向公路,车辆必须以速度v在该公路上行驶。 最后一行包括两个正整数s,t,表示想知道从景点s到景点t最大最小速度比最小的路径。s和t不可能同样。
Output
假设景点s到景点t没有路径。输出“IMPOSSIBLE”。否则输出一个数。表示最小的速度比。假设须要。输出一个既约分数。
Sample Input
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
Sample Output
IMPOSSIBLE
【例子输出2】
5/4
【例子输出3】
2
HINT
Source
思路非常像最小生成树。
先将边依照权值从小到大排序。
枚举最小边,将其它边按顺序依次加进去,直到s和t属于一个集合,用并查集维护。
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<algorithm>
#define F(i,j,n) for(int i=j;i<=n;i++)
#define D(i,j,n) for(int i=j;i>=n;i--)
#define ll long long
#define maxn 505
#define maxm 5005
using namespace std;
struct data{int x,y,z;}a[maxm];
int n,m,s,t,mn,mx,p[maxn];
inline int read()
{
int x=0,f=1;char ch=getchar();
while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
while (ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
}
inline bool cmp(data a1,data a2)
{
return a1.z<a2.z;
}
inline int find(int x)
{
return p[x]==x?x:p[x]=find(p[x]);
}
inline void merge(int x,int y)
{
int fx=find(x),fy=find(y);
if (fx!=fy) p[fx]=fy;
}
inline int gcd(int x,int y)
{
return y? gcd(y,x%y):x;
}
int main()
{
n=read();m=read();
F(i,1,m){a[i].x=read();a[i].y=read();a[i].z=read();}
sort(a+1,a+m+1,cmp);
s=read();t=read();
F(i,1,m)
{
F(j,1,n) p[j]=j;
merge(a[i].x,a[i].y);
int tmp=i;
while (tmp<m&&find(s)!=find(t))
{
tmp++;
merge(a[tmp].x,a[tmp].y);
}
if (find(s)!=find(t)) continue;
if (tmp>m) tmp=i;
if (!mx||(a[tmp].z*1.0/a[i].z<mx*1.0/mn))
{
mx=a[tmp].z;
mn=a[i].z;
}
}
if (!mx) printf("IMPOSSIBLE\n");
else if (mx%mn==0) printf("%d\n",mx/mn);
else
{
int tmp=gcd(mx,mn);
printf("%d/%d\n",mx/tmp,mn/tmp);
}
}
bzoj1050【HAOI2006】旅行comf的更多相关文章
- bzoj1050: [HAOI2006]旅行comf
Description 给你一个无向图,N(N<=500)个顶点, M(M<=5000)条边,每条边有一个权值Vi(Vi<30000).给你两个顶点S和T,求一条路径,使得路径上最大 ...
- [BZOJ1050] [HAOI2006] 旅行comf (Kruskal, LCT)
Description 给你一个无向图,N(N<=500)个顶点, M(M<=5000)条边,每条边有一个权值Vi(Vi<30000).给你两个顶点S和T,求一条路径,使得路径上最大 ...
- bzoj1050[HAOI2006]旅行comf(枚举+贪心+并查集)
Description 给你一个无向图,N(N<=500)个顶点, M(M<=5000)条边,每条边有一个权值Vi(Vi<30000).给你两个顶点S和T,求一条路径,使得路径上最大 ...
- BZOJ1050: [HAOI2006]旅行comf(并查集 最小生成树)
Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4021 Solved: 2257[Submit][Status][Discuss] Descript ...
- [BZOJ1050][HAOI2006]旅行comf 枚举+并查集
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1050 将边排序,枚举边权最小的边,依次加边直到S和T连通,更新答案. #include&l ...
- [bzoj1050 HAOI2006] 旅行comf (kruskal)
传送门 Description 给你一个无向图,N(N<=500)个顶点, M(M<=5000)条边,每条边有一个权值Vi(Vi<30000).给你两个顶点S和T,求 一条路径,使得 ...
- BZOJ1050 [HAOI2006]旅行comf[并查集判图连通性]
★ Description 给你一个无向图,N(N<=500)个顶点, M(M<=5000)条边,每条边有一个权值Vi(Vi<30000).给你两个顶点S和T,求 一条路径,使得路径 ...
- 【BZOJ1050】[HAOI2006]旅行comf 并查集
[BZOJ1050][HAOI2006]旅行comf Description 给你一个无向图,N(N<=500)个顶点, M(M<=5000)条边,每条边有一个权值Vi(Vi<300 ...
- 【bzoj1050】[HAOI2006]旅行comf
1050: [HAOI2006]旅行comf Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2813 Solved: 1534[Submit][St ...
- BZOJ 1050 [HAOI2006]旅行comf
1050: [HAOI2006]旅行comf Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1889 Solved: 976[Submit][Sta ...
随机推荐
- SQL的运算符优先级
注: 1.乘除的优先级高于加减: 2.同一优先级运算符从左向右执行: 3.括号内的运算先执行.
- Javascript的jsonp原理
Javascript的jsonp原理 首先JSON是一种基于文本的数据交换方式,或者叫做数据描述格式 当一个网页在请求JavaScript文件时则不受是否跨域的影响,凡是拥有”src”这个属性的标 ...
- Maven学习总结(25)——Eclipse Maven Update 时JDK版本变更问题
1.新建一个Maven项目JDK版本和系统版本不对应, 2.右键Maven项目->Maven->Update ProjectJDK版本改变了, 3.操作系统的JDK重装了新的版本,这是引起 ...
- java ee服务器/应用服务器的理解
42.由Apache.Sun 和其他一些公司及个人共同开发而成.由于有了Sun 的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现.43.可以这样认为,当在一台机器上配 ...
- UNIX基础【UNIX入门经典】
最早在学校很流行.学生毕业以后就会为公司购买操作系统.导致UNIX流行 UNIX内核: Shell:sh csh ksh 其他组件:
- (OpenGL ES 2.0 Shading Language) attribute 、uniform 和 varying
一:attribute .uniform 和 varying 都是glsl的变量的内存指示器(storage qualifiers),指明变量的内存特性 二:attribute attribute 是 ...
- POJ 题目3237 Tree(Link Cut Tree边权变相反数,求两点最大值)
Tree Time Limit: 5000MS Memory Limit: 131072K Total Submissions: 6131 Accepted: 1682 Description ...
- nyoj--124--中位数(水题)
中位数 时间限制:3000 ms | 内存限制:65535 KB 难度:2 描述 一组数据按从小到大的顺序依次排列,处在中间位置的一个数叫做中位数. 比如 1 5 10 11 9 其中位数就是9 ...
- VC++ LPARAMA 转换成CString
如果是SendMessage发送的CString CString s = "xxxxxx";SendMessage(hWnd,WM_XXXX,NULL,(LPARAM)&s ...
- 访问视频资源报错:Failed to load resource: net::ERR_CONNECTION_RESET
访问视频资源报错: 浏览器显示:Failed to load resource: net::ERR_CONNECTION_RESET. 原因:公司内部限制了访问外网资源,凡是视频资源都不能访问. 解决 ...