最舒适的路线

异形卵潜伏在某区域的一个神经网络中。其网络共有 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 是整数。数据之间有一个空格。

【 样 例 】

标准输入标准输出
22
3 25/4
1 2 2
2 3 4
1 3
3 3
1 2 10
1 2 5
2 3 8
1 3

【 代 码 实 现 】

#include <iostream>
#include <cstring>
using namespace std;
const int MAXN=5010;
int A[MAXN][2];

int main() {
	int K, N, M, S, T, Xi, Yi, Xii=-100, Yii=-100, ZB=1;
	int Vi, max=0, min=30000, max1=30000, min1=30000;
	int a, b;
	cin>>K;
	while(K--) {
		memset(A,0,sizeof(A));
		cin>>N>>M;
		for(int i=0; i<M; i++) {
			cin>>Xi>>Yi>>Vi;
			if(Xi==Xii) {
				A[i-1][0]=ZB;
				A[i][0]=ZB;
				A[i][1]=Vi;
			} else {
				A[i][1]=Vi;
				ZB++;
			}
			Xii=Xi;
			Yii=Yi;
		}
		cin>>S>>T;
		for(int i=0; i<M; i++) {
			if(!A[i][0]) {
				if(A[i][1]>max) max=A[i][1];
				if(A[i][1]<min) min=A[i][1];
			}
		}

		for(int i=0; i<M; i++) {
			if(A[i][0]) {
				if(A[i][1]<min) {
					if(min-A[i][1]<min1) min1=min-A[i][1];
				} else if(A[i][1]>max) {
					if(A[i][1]-max<max1) max1=A[i][1]-max;
				}
				if(A[i][0]!=A[i+1][0] || i+1==M) {
					max1>min1? min-=min1:max+=max1;
					max1=30000;
					min1=30000;
				}
			}
		}
		if(max%min==0) cout<<max/min;
		else {
			a=max;
			b=min;
			while(a*b!=0) {
				if(a>b) {
					a = a%b;
				} else {
					b = b%a;
				}
			}
			if(a==0) cout<<max/b<<"/"<<min/b;
			else cout<<max/a<<"/"<<min/a;
		}
		max=0;
		min=30000;
		Xii=-100;
		Yii=-100;
		ZB=1;
	}
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值