求最小生成树的最大边 ,初始值设一千万还是WA也是醉了,看了解题报告才发现必须足够大才可以。
#include <stdio.h>
#include <iostream>
#include <string.h>
#include <algorithm>
#include <stdlib.h>
using namespace std;
int vis[10010];
int low[10010];
int p[2010][2010];
int i,j,k;
int minn ,pos;
int n,m;
int prim()
{
int ans = -0x7fffffff;
memset (vis,0,sizeof(vis));
pos=1;
vis[1]=1;
for (i =1;i<=n;i++)
{
if (i!=pos)
low[i] = p[i][pos];
}
for (i=1;i<n;i++)
{
minn = 0x7fffffff;
for (int i=1;i<=n;i++)
{
if (!vis[i] && minn > low[i])
{
minn = low[i];
pos = i;
}
}
ans = max (minn,ans);
vis[pos]=1;
for (int i=1;i<=n;i++)
{
if (!vis[i] && low[i] > p[i][pos])
low[i]=p[pos][i];
}
}
return ans;
}
int main()
{
while (scanf ("%d%d",&n,&m)!=EOF)
{
int c,d,e;
for ( i =1;i<=n;i++)
for( j=1;j<=n;j++)
{
if (i == j)
p[i][j] = 0;
else
p[i][j] =0x7fffffff;
}
for (i =1;i<=m;i++)
{
scanf ("%d%d%d",&c,&d,&e);
if (p[c][d] > e)
p[c][d]=p[d][c]=e;
}
int res = prim();
printf("%d\n",res);
}
return 0;
}