最舒适的路线 第六届
生活随笔
收集整理的這篇文章主要介紹了
最舒适的路线 第六届
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目描述
異形卵潛伏在某區(qū)域的一個神經網絡中。其網絡共有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 )
【約束條件】
2≤K≤5 1<N≤500 0<M≤5000 1≤ Xi, Yi , S , T ≤N 0< Vi <30000,
Vi是整數。數據之間有一個空格。
輸出
對于每組測試數據,輸出一行:如果神經元S到神經元T沒有路線,輸出“IMPOSSIBLE”。否則輸出一個數,表示最小的速度比。如果需要,輸出一個既約分數。樣例輸入
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/4AC代碼:
#include<bits/stdc++.h> //包含c++中所以得頭文件 using namespace std; int father[5050]; int K,N,M; struct node{int x,y,v; }s[5050]; int find(int x){while(x!=father[x])x=father[x];return x; } void merage(int x,int y){x=find(x);y=find(y);if(x>y)father[x]=y;else father[y]=x; } int cmp(node a,node b){return a.v>b.v; } int gcd(int a,int b) { while(b!=0) { int t=a%b; a=b; b=t; } return a; } int main() {int i,j,k,a,b;int S,T;double l;while(cin>>K)while(K--){cin>>N>>M;for(i=0;i<M;i++)cin>>s[i].x>>s[i].y>>s[i].v;cin>>S>>T;sort(s,s+M,cmp);l=INT_MAX*1.0;for(i=0;i<M;i++){for(j=0;j<N;j++)father[j]=j;for(k=i;k<M;k++){if(find(s[k].x)!=find(s[k].y)) merage(s[k].x,s[k].y);if(find(S)==find(T))break;}if(k==M)break;if(s[i].v*1.0/s[k].v<l){a=s[i].v,b=s[k].v;l=s[i].v*1.0/s[k].v;}}if(l==INT_MAX)printf("IMPOSSIBLE\n");else if(a%b==0)cout<<a/b<<endl;else cout<<a/gcd(a,b)<<"/"<<b/gcd(a,b)<<endl;}return 0; }總結
以上是生活随笔為你收集整理的最舒适的路线 第六届的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: dubbo和mq的使用场景
- 下一篇: 【版本发布】JEECG 3.6.2 移动