1. 程式人生 > >poj1797 Heavy Transportation(最短路變形)

poj1797 Heavy Transportation(最短路變形)

max while oid amp == %d cos cin std

題目大意:有n個城市,m條道路,在每條道路上有一個承載量,現在要求從1到n城市最大承載量,而最大承載量就是從城市1到城市n所有通路上的最大承載量
解題思路:其實這個求最大邊可以近似於求最短路,只要修改下找最短路更新的條件就可以了

#include <iostream>
#include <cstring>
#include <cstdio>

using namespace std;

const int maxn=1010;
const int INF=0x3f3f3f3f;

int lowc[maxn],cost[maxn][maxn];
bool
vis[maxn]; int T; int n,m; void Dijkstra() { for(int i=2;i<=n;i++) { lowc[i]=cost[1][i]; } lowc[1]=0; vis[1]=1; for(int i=1;i<=n;i++) { int k=-1; for(int j=1;j<=n;j++) { if(!vis[j]&&(k==-1||lowc[j]>lowc[k]))//
此處是找出最大的值,因為這裏wa了好幾發 { k=j; } } if(k==-1) break; vis[k]=1; for(int j=1;j<=n;j++) { if(!vis[j]&&lowc[j]<min(lowc[k],cost[j][k])) //lowc[j]=max(lowc[j],max(lowc[k],cost[k][j])); { lowc[j]
=min(lowc[k],cost[j][k]); } } } } void init() { for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { if(i==j) cost[i][j]=0; else cost[i][j]=0; } } } int main() { ios::sync_with_stdio(false);cin.tie(0); cin>>T; int kase=1; while(T--) { cin>>n>>m; memset(vis,0,sizeof(vis)); init(); for(int i=1;i<=m;i++) { int u,v,w; cin>>u>>v>>w; cost[u][v]=cost[v][u]=w; } Dijkstra(); printf("Scenario #%d:\n",kase++); printf("%d\n\n",lowc[n]); } return 0; }

poj1797 Heavy Transportation(最短路變形)