标签:
| Time Limit: 3000MS | Memory Limit: 30000K | |
| Total Submissions: 29682 | Accepted: 7919 |
Description
Input
Output
Sample Input
1 3 3 1 2 3 1 3 4 2 3 5
Sample Output
Scenario #1: 4
Source
原题链接:http://poj.org/problem?id=1797
题意:有n个城市,m条道路,每条道路都有一定的承重,问你从1开始到达n的最大承重量(该路线上所有承重量的最小值)。
思路:还是最短路的问题,改变一下判断条件就可以了。
Dijkstra算法AC代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int INF=0x3f3f3f3f;
const int maxn=1005;
int a[maxn][maxn];
bool vis[maxn];
int dis[maxn];
int n;
void Dij()
{
for(int i=1;i<=n;i++)
{
vis[i]=false;
dis[i]=a[1][i];
}
vis[1]=true;
dis[1]=0;
for(int i=1;i<=n;i++)
{
int p;
int maxx=0;//此题要找最大的
for(int j=1;j<=n;j++)
{
//关键代码
if(!vis[j]&&dis[j]>maxx)
maxx=dis[p=j];
}
vis[p]=true;
for(int j=1;j<=n;j++)
{
//关键代码
if(!vis[j]&&dis[j]<min(a[p][j],dis[p]))
{
dis[j]=min(a[p][j],dis[p]);
}
}
}
}
int main()
{
int T;
int kase=0;
cin>>T;
while(T--)
{
int m;
scanf("%d%d",&n,&m);
int x,y,z;
memset(a,0,sizeof(a));//初始化
for(int i=1;i<=m;i++)
{
scanf("%d%d%d",&x,&y,&z);
if(z>a[x][y])
a[x][y]=a[y][x]=z;
}
Dij();
printf("Scenario #%d:\n",++kase);
printf("%d\n\n",dis[n]);
}
return 0;
}
POJ 1797 Heavy Transportation【Dijkstra最短路变形】
标签:
原文地址:http://blog.csdn.net/hurmishine/article/details/52151573