//poj2485 Highways(kruskal求最小生成树)
/*
适合于稀疏图
*/
#include<iostream>
#include<cstdio>
#include<string.h>
#include<algorithm>
using namespace std;
const int N=600;
struct Node
{
int from;
int to;
int value;
Node(){}
Node(int from,int to ,int value):from(from),to(to),value(value){}
};
Node p[N*N];
int n;
int father[N];
int e;
bool cmp(Node a,Node b)
{
return a.value<b.value;
}
void ReadMap()
{
e=0;
int v;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
scanf("%d",&v);
p[e++]=Node(i,j,v);
}
}
}
//===============主要算法=======================
void set_clear()
{
for(int i=0;i<=n;i++)
{
father[i]=i;
}
}
int find(int x)//并查集原理
{
if(x!=father[x])
{
father[x]=find(father[x]);
}
return father[x];
}
int kruskal()
{
set_clear();
int m=0,ans=0;
for(int i=0;i<e;i++)
{
int x=find(p[i].from);
int y=find(p[i].to);
if(x==y) continue;
m++;
ans=p[i].value;
father[y]=x;
if(m==n-1) break;
}
return ans;
}
//==================================
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
ReadMap();
sort(p,p+e,cmp);
printf("%d\n",kruskal());
}
return 0;
}
poj2485 Highways(kruskal求最小生成树)
最新推荐文章于 2020-01-15 00:21:32 发布