http://poj.org/problem?id=2485
最小生成树 模板题
kruscal算法
代码:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <map>
#include <set>
#include <queue>
using namespace std;
int p[505];
struct node
{
int v;
int u;
int d;
}num[50005];
bool operator <(node a,node b)
{
return a.d<b.d;
}
int find(int x)
{
return p[x]==x?x:find(p[x]);
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int maxn=1;
int n;
int b;
scanf("%d",&n);
int len=0;
for(int i=1;i<=n;i++)
p[i]=i;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
scanf("%d",&b);
num[len].v=i;
num[len].u=j;
num[len].d=b;
len++;
}
sort(num,num+len);
for(int i=0;i<len;i++)
{
// printf("%d %d %d\n",num[i].v,num[i].u,num[i].d);
int x=find(num[i].v),y=find(num[i].u);
if(x!=y)
{
maxn=max(maxn,num[i].d);
p[x]=y;
}
}
printf("%d\n",maxn);
}
}