题意:求最小生成树里面最长的一条边
代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int map[505][505];
int dis[505];
bool vis[505];
int main()
{
// freopen("data.txt","r",stdin);
int T;
scanf("%d",&T);
while(T--)
{
int n;
scanf("%d",&n);
for(int i=0;i<n;++i)
{
for(int j=0;j<n;++j)
{
scanf("%d",&map[i][j]);
}
}
memset(dis,-1,sizeof(dis));
memset(vis,false,sizeof(vis));
dis[0]=0;
int ans=0;
for(int i=0;i<n;++i)
{
int mark=-1;
for(int j=0;j<n;++j)
{
if(!vis[j]&&dis[j]!=-1)
{
if(mark==-1)mark=j;
else if(dis[j]!=-1&&dis[j]<dis[mark])mark=j;
}
}
ans=max(ans,dis[mark]);
vis[mark]=true;
for(int j=0;j<n;++j)
{
if(!vis[j])
{
if(dis[j]==-1)dis[j]=map[mark][j];
else dis[j]=min(dis[j],map[mark][j]);
}
}
}
printf("%d\n",ans);
}
return 0;
}