又是题意杀....
题目大意:有n个城市,m条道路,在每条道路上有一个承载量,现在要求从1到n城市最大承载量,而最大承载量就是从城市1到城市n所有通路上的最大承载量,比如1到2的载重量是3, 2到3的载重量是5,那么1到3的最大载重量就是3,因为重量大于3的车无法通过1->2这条道路
思路:其实这个求最大边可以近似于求最短路,只要修改下松弛的条件就可以了
#include <cstdio>
#include <queue>
#include <cstring>
#include <iostream>
#include <cstdlib>
#include <algorithm>
#include <vector>
#include <map>
#include <string>
#include <set>
#include <ctime>
#include <cmath>
#include <cctype>
using namespace std;
#define maxn 1005
#define LL long long
int cas=1,T;
const int INF = 1<<25;
int mapp[1005][1005];
int d[maxn];
int n,m;
int dijkstra()
{
int vis[maxn];
int v;
int mins;
for (int i = 1;i<=n;i++)
{
d[i]=mapp[1][i];
vis[i]=0;
}
d[1]=0;
for (int i = 1;i<=n;i++)
{
mins = -1;
for (int j = 1;j<=n;j++)
{
if (!vis[j] && d[j] > mins)
{
mins = d[j];
v=j;
}
}
vis[v]=1;
for (int j = 1;j<=n;j++)
{
if (!vis[j] && d[j] < min(d[v],mapp[v][j]))
d[j]=min(d[v],mapp[v][j]);
}
}
return d[n];
}
int main()
{
//freopen("in","r",stdin);
scanf("%d",&T);
while (T--)
{
memset(mapp,0,sizeof(mapp));
printf("Scenario #%d:\n",cas++);
scanf("%d%d",&n,&m);
for (int i = 1;i<=m;i++)
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
mapp[a][b]=c;
mapp[b][a]=c;
}
printf("%d\n\n",dijkstra());
}
//printf("time=%.3lf",(double)clock()/CLOCKS_PER_SEC);
return 0;
}