#include
#include
using namespace std;
//本题要求求出最大树,刚好克鲁斯卡尔算法按照权值从大到小排序就行了
struct Edge
{
int x,y,w;
bool operator<(const Edge &other)const
{
return w>other.w;//从大到小
}
}edge[20001];
int f[1001];
int rank[1001];
int n,m;
//并查集的三个函数,本来可以不要rank数组的,但是为了模板的完整性,还是加上了,方便记牢了,以后不容易出错
void Init()
{
int i;
for(i=1;i<=n;i++)
f[i]=i;
}
int Find(int x)
{
if(x!=f[x])
f[x]=Find(f[x]);
return f[x];
}
void Union(int x,int y)
{
int i=Find(x);
int j=Find(y);
if(rank[i]>rank[j])
f[j]=i;
else
{
f[i]=j;
if(rank[i]==rank[j])
rank[j]++;
}
}
int main()
{
int i;
scanf("%d%d",&n,&m);
Init();
for(i=0;i
poj2377
最新推荐文章于 2018-03-08 18:45:26 发布