求所有路径中最小权值最大的那条路径
水水水水水~
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
bool sym[1010];
int mp[1010][1010],st,en,we,n,m,maw[1010];
int dijkstra()
{
memset(sym,0,sizeof(sym));
memset(maw,0,sizeof(maw));
sym[1] = true;
maw[1] = 10000000;
int pre = 1;
for(int i=1;i<=n;i++)
{
int ans = min(maw[pre],mp[pre][i]);
if(!sym[i]&&maw[i]<ans)
maw[i] = ans;
}
for(int i=2;i<=n;i++)
{
int ma = 0;
for(int j=1;j<=n;j++)
{
if(!sym[j]&&maw[j]>ma)
{
pre = j;
ma = maw[j];
}
}
sym[pre] = 1;
for(int j=1;j<=n;j++)
{
int ans = min(maw[pre],mp[pre][j]);
if(!sym[j]&&maw[j]<ans)
maw[j] = ans;
}
}
return maw[n];
}
int main()
{
int t,t1;
scanf("%d",&t);
t1 = t;
int i1 = 1;
while(t--)
{
scanf("%d%d",&n,&m);
memset(mp,0,sizeof(mp));
while(m--)
{
scanf("%d%d%d",&st,&en,&we);
if(mp[st][en]<we)
{
mp[st][en] = we;
mp[en][st] = we;
}
}
printf("Scenario #%d:\n%d\n",i1,dijkstra());
if(t1!=i1)printf("\n");
i1++;
}
return 0;
}