djikstra的稍微变形,找的是最大载重,转移方程稍微变形
/dijkstra
#include <iostream>
#include<string>
#include<stdio.h>
using namespace std;
int map[1005][1005];
int temp[1005];//记录某点到1的最大载重
bool flag[1005];
int min(int a,int b)
{
if (a>b)
return b;
else return a;
}
int main()
{
int N;cin>>N;int cnt=0;
while(N--)
{
cnt++;
memset(flag,0,sizeof(flag));
memset(map,0,sizeof(map));
int n,m,i,j,k;
scanf("%d%d",&n,&m);
int a,b,c;
while(m--)
{
scanf("%d%d%d",&a,&b,&c);
map[a][b]=c;
map[b][a]=c;
}
int num=1;
for (i=1;i<=n;i++)
{
temp[i]=map[1][i];
}
for (i=0;i<n;i++)
{
int M=0;
for (j=1;j<=n;j++)
{
if (flag[j]==0&&temp[j]>M)//找到源点距离最大的点
{
num=j;
M=temp[j];
}
}
for(j=1;j<=n;j++)//以找到的点为基准 更新与该点相连的未更新过的点的最大载重
{
if (flag[j]==0&&map[num][j]&&min(temp[num],map[num][j])>temp[j])
{
temp[j]=min(temp[num],map[num][j]);
}
}
flag[num]=1;
}
cout<<"Scenario #"<<cnt<<":"<<endl;
cout<<temp[n]<<"\n"<<endl;
}
return 0;
}