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 ...
随机推荐
- Ubuntu下使用crontab部署定时任务
Ubuntu下使用crontab部署定时任务 安装cron apt-get install cron 开启crontab日志 默认情况下的日志是没有开启的,我们需要找到 /etc/rsyslog.d/ ...
- DDL表结构修改
*1)创建表 create table 表名( 字段名 类型, .... ); //以现有表复制一个新表 create table j012 as se ...
- CODEVS——T 1005 生日礼物
http://codevs.cn/problem/1005/ 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description ...
- STL_算法_对全部元素排序(sort、stable_sort)
C++ Primer 学习中. . . 简单记录下我的学习过程 (代码为主) //大部分容器适用.不适用于list容器 sort(b,e) sort(b,e,p) stable_sort(b,e) ...
- XML 解析---dom解析和sax解析
眼下XML解析的方法主要用两种: 1.dom解析:(Document Object Model.即文档对象模型)是W3C组织推荐的解析XML的一种方式. 使用dom解析XML文档,该解析器会先把XML ...
- 3、Android中Activity的跳转
1.创建project file->new->android application 依次填入应用名称.project名.包名 在project文件夹下找到src/com. ...
- Residual Networks <2015 ICCV, ImageNet 图像分类Top1>
本文介绍一下2015 ImageNet中分类任务的冠军--MSRA何凯明团队的Residual Networks.实际上.MSRA是今年Imagenet的大赢家.不单在分类任务,MSRA还用resid ...
- hdoj--4501--小明系列故事——买年货(三维背包)
小明系列故事--买年货 Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Tota ...
- 自己定义CNN网络模型并使用caffe训练
caffe自带的例子中对mnist手写体数字训练使用的卷积神经网络是在lenet_train_test.prototxt中定义的,隐含层包含了2个卷积层,2个池化层,2个全连接层,1个激活函数层.网络 ...
- 143.vector模板库
myvector.h #pragma once #include <initializer_list> #include <iostream> using namespace ...