poj1797
题目名称:Heavy Transportation
题目链接:http://poj.org/problem?id=1797
题意:有n座城市和m条道路,每条道路都有一个承重量,问从1 -> n 的最大承重量,也就是所有通路中 每条通路的最小承重量 的最大值。
代码如下:
#include<cstdio> #include<iostream> #include<string> #include<cstring> #include<cmath> #include<algorithm> #include<vector> #include<queue> using namespace std; const int maxn=1001; const int INF=0x3f3f3f3f; vector<int> vr[maxn]; int dis[maxn][maxn]; bool inque[maxn]; int d[maxn]; int n,m; void spfa(int s) { for(int i=1;i<=n;i++) { d[i]=-1; inque[i]=false; } queue<int> Q; Q.push(s); inque[s]=true; d[s]=INF; while(!Q.empty()) { int u=Q.front(); Q.pop(); inque[u]=false; for(int i=0;i<vr[u].size();i++) { int v=vr[u][i]; if(dis[v]!=0&&d[v]<min(d[u],dis[u][v])) { d[v]=min(d[u],dis[u][v]); if(!inque[v]) { inque[v]=true; Q.push(v); } } } } } int main() { int t; while(scanf("%d",&t)!=EOF) { int ss=1; while(t--) { scanf("%d%d",&n,&m); memset(dis,0,sizeof(dis)); int u,v,w; while(m--) { scanf("%d%d%d",&u,&v,&w); if(w>dis[u][v]) { dis[u][v]=w; dis[v][u]=w; } vr[u].push_back(v); vr[v].push_back(u); } spfa(1); printf("Scenario #%d:\n%d\n\n",ss++,d[n]); } } return 0; }
本文版权归作者本人所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.