標籤:blog os io for ar div amp log
這題大概就是說從1 到n 選擇一條載重最大的路 並求出最大值
要得出最大的載重量 我們就要求出每條路線能夠負重的最小值
可以通過 dijkstra演算法來求出
假設現在在x 點 在這之前的最大載重量為 d[x] 現在要通過路線 w[x][y] 到達y
我們就要將 d[x]和w[x][y] 進行比較 分類討論得到 d[y]
#include<stdio.h>#include<string.h>#include<math.h>#include<iostream>#include<algorithm>#include<queue>#include<stack>#define mem(a,b) memset(a,b,sizeof(a))#define ll __int64#define MAXN 1000#define INF 0x7ffffff#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1using namespace std;int w[1200][1200];int d[1200];int v[1200];int main(){ int t,n,m,cas=1; int i,j; int a,b,c; cin>>t; while(t--) { printf("Scenario #%d:\n",cas++); cin>>n>>m; mem(w,0); mem(v,0); while(m--) { scanf("%d%d%d",&a,&b,&c); w[a][b]=w[b][a]=c; } for(int i=1;i<=n;i++) d[i]=(i==1?INF:0); for(i=1;i<=n;i++) { int x,maxx=0; for(int y=1;y<=n;y++) if(!v[y]&&d[y]>=maxx) maxx=d[x=y]; v[x]=1; for(int y=1;y<=n;y++) { if(d[x]>=w[x][y]&&w[x][y]>d[y]) { d[y]=w[x][y]; } else if(d[x]<w[x][y]&&d[x]>d[y]) { d[y]=d[x]; } } } cout<<d[n]<<endl<<endl; } return 0;}