标签:
Description
Input
Output
Sample Input
1 3 3 1 2 3 1 3 4 2 3 5
Sample Output
Scenario #1: 4 每条路都有一个限制的重量
求从1到n最多可以装载多少货物顺利通过
#include<stdio.h> #include<string.h> #include<iostream> #include<algorithm> using namespace std; //const int inf=0x7fffffff; const int MAXN=1010; //#define typec int const int INF=0x3f3f3f3f;//防止后面溢出,这个不能太大 bool vis[MAXN]; int dis[MAXN]; int map[MAXN][MAXN]; int n; void Dijkstra(int beg) { for(int i=1; i<=n; i++) { dis[i]=map[beg][i]; vis[i]=false; } dis[beg]=0; for(int j=0; j<n; j++) { int k=-1; int Min=-1; for(int i=1; i<=n; i++) if(!vis[i]&&dis[i]>Min) { Min=dis[i]; k=i; } if(k==-1) break; vis[k]= true; for(int i=1; i<=n; i++) if(!vis[i]&&dis[i]<min(dis[k],map[i][k])) { dis[i]=min(dis[k],map[i][k]); } } } int main(){ int t; scanf("%d",&t); int cnt=0; while(t--){ cnt++; int m; memset(vis,false,sizeof(vis)); scanf("%d%d",&n,&m); /*for(int i=1;i<=n;i++){ for(int j=i;j<=n;j++){ if(i==j) map[i][i]=0; else map[i][j]=map[j][i]=INF; } }*/ memset(map,0,sizeof(map)); int u,v,w; for(int i=1;i<=m;i++){ scanf("%d%d%d",&u,&v,&w); map[u][v]=map[v][u]=w; } Dijkstra(1); printf("Scenario #%d:\n",cnt); printf("%d\n",dis[n]); puts(""); } return 0; }
POJ 1797 Heavy Transportation (Dijkstra变形)
标签:
原文地址:http://www.cnblogs.com/13224ACMer/p/4986876.html