给定一个图,求最小生成树的最长边
改改模板就可以AC
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#define MAX 600
using namespace std;
const int INF=1000000000;
int g[MAX][MAX];
int minD[MAX];
int mark[MAX];
int mst(int n)
{
int ans=0;
memset(mark,0,sizeof(mark));
for(int i=0;i<n;++i)
minD[i]=INF;
minD[0]=0;
for(int i=0;i<n;++i)
if(g[0][i]<minD[i])
minD[i]=g[0][i];
mark[0]=1;
ans=-1;
for(int i=1;i<n;++i)
{
int k=-1;
for(int j=0;j<n;++j)
{
if(mark[j]==0)
{
if(k==-1||minD[j]<minD[k])
k=j;
}
}
ans=minD[k]>ans?minD[k]:ans;
mark[k]=1;
for(int i=0;i<n;++i)
{
if(mark[i]==0&&g[k][i]<minD[i])
minD[i]=g[k][i];
}
}
return ans;
}
int main()
{
int T,n,i,j;
scanf("%d",&T);
while (T--)
{
scanf("%d",&n);
for (i=0; i<n; i++)
{
for (j=0; j<n; j++)
{
scanf("%d",&g[i][j]);
}
}
printf("%d\n",mst(n));
}
}