1050: [HAOI2006]旅行comf

Time Limit: 10 Sec  Memory Limit: 162 MB

Submit: 2205  Solved: 1174

[Submit][

id=1050" style="color:blue; text-decoration:none">Status][Discuss]

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

【例子输入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

Sample Output

【例子输出1】

IMPOSSIBLE

【例子输出2】

5/4

【例子输出3】

2

HINT

【数据范围】
1<  N < = 500
1 < = x, y < = N,0 < v < 30000,x ≠ y
0 < M < =5000

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

  1. bzoj1050: [HAOI2006]旅行comf

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

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

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

  3. bzoj1050[HAOI2006]旅行comf(枚举+贪心+并查集)

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

  4. BZOJ1050: [HAOI2006]旅行comf(并查集 最小生成树)

    Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 4021  Solved: 2257[Submit][Status][Discuss] Descript ...

  5. [BZOJ1050][HAOI2006]旅行comf 枚举+并查集

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1050 将边排序,枚举边权最小的边,依次加边直到S和T连通,更新答案. #include&l ...

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

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

  7. BZOJ1050 [HAOI2006]旅行comf[并查集判图连通性]

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

  8. 【BZOJ1050】[HAOI2006]旅行comf 并查集

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

  9. 【bzoj1050】[HAOI2006]旅行comf

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

  10. BZOJ 1050 [HAOI2006]旅行comf

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

随机推荐

  1. python_三级字典

    data = { "北京":{ "昌平":{ "沙河":["oldboy","test"], &qu ...

  2. 树形dp复习 树上依赖背包问题

    选课 今天又看了一下这道题,竟然AC不了了 自己的学习效率有点低下 要明白本质,搞透彻 #include<bits/stdc++.h> #define REP(i, a, b) for(r ...

  3. 【codeforces 505D】Mr. Kitayuta's Technology

    [题目链接]:http://codeforces.com/problemset/problem/505/D [题意] 让你构造一张有向图; n个点; 以及所要求的m对联通关系(xi,yi) 即要求这张 ...

  4. 2015 Multi-University Training Contest 8 hdu 5384 Danganronpa

    Danganronpa Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Tot ...

  5. 指尖上的电商---(5)schema.xml配置具体解释

    这一节我们看下schema.xml文件中各个节点的配置极其作用.schema.xml文件中面主要定义了索引数据类型,索引字段等信息. 主要包含了下面节点 1.fieldtype节点 fieldtype ...

  6. 手势跟踪论文学习:Realtime and Robust Hand Tracking from Depth(三)Cost Function

    iker原创.转载请标明出处:http://blog.csdn.net/ikerpeng/article/details/39050619 Realtime and Robust Hand Track ...

  7. Spring表达式语言SpEL简单介绍

    Spring3引入了Spring表达式语言(Spring Expression Language,SpEL). SpEL有非常多特性.比較经常使用的包含: 1.使用bean的id来引用bean, 以下 ...

  8. storm-安装

            storm有两种操作模式: 本地模式和远程模式.使用本地模式的时候,你能够在你的本地机器上开发測试你的topology, 一切都在你的本地机器上模拟出来; 用远端模式的时候你提交的to ...

  9. Android与server通信的方法之中的一个(json)效率不高安全性不好

    http通信.以xml或者json为载体.相互通信数据. Android对于http的网络通信,提供了标准的java接口--httpURLConnection接口.以及apache的接口--httpc ...

  10. Android 开发之集成百度地图的定位与地图展示

    app 应用中,大多数应用都具有定位功能,百度定位就成了开发人员的集成定位功能的首选,近期也在做定位功能,可是发现百度真是个大坑啊, sdk 命名更新了,相关代码却不更新,害得我花费了非常长时间来研究 ...