poj1861/zoj1542 (最小生成树krusual)

poj 点击打开链接

zoj点击打开链接

该死的hdu!!

这道题是在暑假练习赛中的遇到的,在POJ和ZOJ上提交全A了,但在比赛时,怎么都不对!!

坑爹啊!!!!。。

#include"stdio.h"
#include"stdlib.h"
int set[15001];
struct node
{
	int a,b,dis;
}aa[15001];
int find(int x)
{
	int r,i;
	r=x;
	while(set[r]!=r)
		r=set[r];
	while(set[x]!=r)
	{
		i=set[x];
		set[x]=r;
		x=i;
	}
	return r;
}
int cmp(const void*a,const void*b)
{
	struct node *c,*d;
	c=(struct node*)a;
	d=(struct node*)b;
	return c->dis>d->dis?1:-1;
}
int main()
{
	int i,n,m,a,b,c,d[1001],f;
	while(scanf("%d%d",&n,&m)!=-1)
	{
		for(i=0;i<=n;i++)
			set[i]=i;
		for(i=0;i<m;i++)
			scanf("%d%d%d",&aa[i].a,&aa[i].b,&aa[i].dis);
		qsort(aa,m,sizeof(aa[0]),cmp);
		c=0;f=0;
		for(i=0;i<m;i++)
		{
			a=find(aa[i].a);
			b=find(aa[i].b);
			if(a!=b)
			{
				set[a]=b;
				c=(aa[i].dis>c?aa[i].dis:c);
				d[f++]=i;
			}
		}
		printf("%d\n%d\n",c,f);
		for(i=0;i<f;i++)
			printf("%d %d\n",aa[d[i]].a,aa[d[i]].b);
	}
	return 0;
}

你可能感兴趣的:(poj1861/zoj1542 (最小生成树krusual))