poj1797 Heavy Transportation(最短路變形)
阿新 • • 發佈:2018-08-12
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]; boolvis[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(最短路變形)