第六届程序设计大赛 T3 最舒适的路线(并查集)
2015-04-23 10:39
239 查看
最舒适的路线
异形卵潜伏在某区域的一个神经网络中。其网络共有N个神经元(编号为1,2,3,…,N),这些神经元由M条通道连接着。两个神经元之间可能有多条通道。异形卵可以在这些通道上来回游动,但在神经网络中任一条通道的游动速度必须是一定的。当然异形卵不希望从一条通道游动到另一条通道速度变化太大,否则它会很不舒服。现在异形卵聚居在神经元S点,想游动到神经元T点。它希望选择一条游动过程中通道最大速度与最小速度比尽可能小的路线,也就是所谓最舒适的路线。
【标准输入】
第一行: K 表示有多少组测试数据。
接下来对每组测试数据:
第1行: N M
第2~M+1行: Xi Yi Vi (i=1,…..,M)
表示神经元Xi 到神经元Yi之间通道的速度必须是Vi
最后一行: S T ( S ¹ T )
【标准输出】
对于每组测试数据,输出一行:如果神经元S到神经元T没有路线,输出“IMPOSSIBLE”。否则输出一个数,表示最小的速度比。如果需要,输出一个既约分数。
【约束条件】
2≤K≤5 1<N≤500 0<M≤5000 1≤ Xi, Yi , S , T ≤N 0< Vi <30000,
Vi是整数。数据之间有一个空格。
【 样 例 】
标准输入 | 标准输出 |
2 3 2 1 2 2 2 3 4 1 3 3 3 1 2 10 1 2 5 2 3 8 1 3 | 2 5/4 |
#include<cstdio>
#include<string.h>
#include<algorithm>
#define inf 0x3fffffff
using namespace std;
int pre[510],N;
struct Node{
int x,y,v;
}G[5005];
bool cmp(Node A,Node B){return A.v>B.v;}
int find(int x){return x==pre[x]? x :find(pre[x]);}
void join(int a,int b){
int a1=find(a);
int b1=find(b);
if(a1!=b1)pre[a1]=b1;
}
void init(){for(int i=1;i<=N;i++)pre[i]=i; }
int gcd(int x,int y){
while(y){
int c=x%y;
x=y;
y=c;
}
return x;
}
int main()
{
int test,M,S,T,xx,yy;
scanf("%d",&test);
while(test--){
scanf("%d%d",&N,&M);
for(int i=0;i<M;i++)scanf("%d%d%d",&G[i].x,&G[i].y,&G[i].v);
scanf("%d%d",&S,&T);
sort(G,G+M,cmp);
double rate=inf*0.1;
for(int i=0;i<M;i++){
init();
int j=i;
for(;j<M;j++){
if(find(G[j].x)!=find(G[j].y))join(G[j].x,G[j].y);
if(find(S)==find(T))break;
}
if(j==M)break;
if(G[i].v*0.1/G[j].v <rate){
xx=G[i].v; yy =G[j].v;
rate = G[i].v*0.1/G[j].v;
}
}
if(rate==inf)printf("IMPOSSIBLE\n");
else if(xx%yy==0)printf("%d\n",xx/yy);
else printf("%d/%d\n",xx/gcd(xx,yy),yy/gcd(xx,yy));
}
return 0;
}
相关文章推荐
- nyoj 711最舒适的路线(第六届河南省程序设计大赛 并查集)
- nyoj711&&zznu1624 最舒适的路线(第六届河南省程序设计大赛 广搜)
- 第六届河南省赛 zzulioj 1483: 最舒适的路线 (并查集)好题 nyoj 711
- 最舒适的路线--河南省第六届大学生程序设计竞赛
- 第六届河南省赛 最舒适的路线【并查集】
- 第六届河南省程序设计大赛
- NYOJ - 716 - River Crossing --第六届河南省程序设计大赛 (简单DP!!)
- 哈理工第六届程序设计大赛 I 旅行 (最短路)
- 哈理工软件学院"兆方美迪"杯第六届程序设计大赛【高年级组】--决赛 Problem G:逃脱 By Assassin
- 河南省第六届程序设计大赛--Card Trick
- 湖南省第六届 中信软件教育杯 大学生程序设计大赛试题 第一题 汽水瓶
- codevs1001 舒适的路线 - 贪心 - 并查集
- HDU 6109 数据分割 【并查集+set】 (2017"百度之星"程序设计大赛 - 初赛(A))
- codevs 1001 舒适的路线 并查集
- NYOJ - 715 - Adjacent Bit Counts --第六届河南省程序设计大赛 (DP!!)
- nyoj711最舒适的路线 (枚举 + 并查集 )
- NYOJ 711 最舒适的路线(并查集+枚举,贪心+欧几里德算法)
- 南京林业大学“未来之星”第六届程序设计大赛(决赛)试题E 参考代码
- codevs1001 舒适的路线 贪心枚举+并查集
- codevs 1001 舒适的路线(并查集) 题解