最短路径的变种
每次更新是以cost[i]和边a[u][j]的最小值如果比cost[j]大,则进行更新cost[j]
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int n,m;
int a[1002][1002];
const int inf = 0x3f3f3f3f;
int vis[10002];
int cost[1002];
int kase;
void dijkstra()
{
int i,j;
memset(vis,0,sizeof(vis));
for(i=1;i<=n;i++)
cost[i]=a[1][i];
int k;
vis[1]=1;
for(k=1;k<n;k++)
{
int maxx=-inf;
int u=1;
for(i=1;i<=n;i++)
{
if(!vis[i]&&maxx<cost[i])
{
u=i;
maxx=cost[i];
}
}
vis[u]=1;
int temp;
for(j=1;j<=n;j++)
{
temp=min(cost[u],a[u][j]);
if(temp>cost[j])
cost[j]=temp;
}
}
printf("Scenario #%d:\n",kase);
printf("%d\n\n",cost[n]);
}
int main()
{
int t;
std::ios::sync_with_stdio(false);
cin>>t;
for(kase=1;kase<=t;++kase)
{
int i,j;
cin>>n>>m;
int x,y,z;
memset(a,0,sizeof(a));
for(i=1;i<=m;i++)
{
cin>>x>>y>>z;
a[x][y]=a[y][x]=z;
}
dijkstra();
}
}