BZOJ1083 [SCOI2005]繁忙的都市(最小生成树)

【题解】

裸的Kruskal,将边从小到大排序,依次加边,并查集维护连通性即可


#include
#include
int fa[305]={0},u[90005]={0},v[90005]={0},w[90005]={0};
int father(int x)
{
	if(fa[x]!=x) fa[x]=father(fa[x]);
	return fa[x];
}
void jh(int* a,int* b)
{
	int t=*a;
	*a=*b;
	*b=t;
}
void kp(int low,int high)
{
	int i=low,j=high,mid=w[(i+j)/2];
	while(imid) j--;
		if(i<=j)
		{
			jh(&u[i],&u[j]);
			jh(&v[i],&v[j]);
			jh(&w[i],&w[j]);
			i++;
			j--;
		}
	}
	if(j>low) kp(low,j);
	if(i


你可能感兴趣的:(生成树问题)