zoj 2966 Build The Electric System(MST)

原创 2012年03月29日 20:13:02

没想到省赛题目会有这么裸的算法题。kruskal水过

 

#include<stdio.h>
#include<stdlib.h>
#define MAXM 62255
#define MAXN 505
typedef struct  edge{
	int u,v,w;
}edge;
edge edges[MAXM];
int parent[MAXN];
int n,m;
int i,j;
void UFset()//初始化
{
	for(i=0;i<=n;i++)
		parent[i]=-1;
}
int find(int x)//返回x的根节点s
{
	int s;
	for(s=x;parent[s]>=0;s=parent[s]);
	while(s!=x)//优化:压缩路径
	{
		int tmp=parent[x];
		parent[x]=s;
		x=tmp;
	}
	return s;
}
void Union(int R1,int R2)
{
	int r1=find(R1),r2=find(R2);
	int tmp=parent[r1]+parent[r2];
	if(parent[r1]>parent[r2])//优化:加权--把结点少的加到结点多的一边
	{
		parent[r1]=r2;
		parent[r2]=tmp;
	}
	else 
	{
		parent[r2]=r1;
		parent[r1]=tmp;
	}
}
int cmp(const void *a,const void *b)
{
	edge aa=*(const edge *)a;
	edge bb=*(const edge *)b;
	return aa.w-bb.w;
}
void Kruskal()
{
	int sumweight=0;//生成树的权值;
	int num=0;//已选用的变得数目
	int u,v;
	UFset();
	for(i=0;i<m;i++)
	{
		u=edges[i].u;v=edges[i].v;
		if(find(u)!=find(v))//不是同一个连通分量
		{
	//		printf("%d %d %d\n",u,v,edges[i].w);
			sumweight+=edges[i].w;num++;
			Union(u,v);
		}
		if(num>n-1) break;
	}
	printf("%d\n",sumweight);
}

int main()
{
	int T;
	int a,b,c;
	scanf("%d",&T);
	while(T--)
	{
		scanf("%d%d",&n,&m);
		for(i=0;i<m;i++)
		{
			scanf("%d%d%d",&a,&b,&c);
			edges[i].u=a;
			edges[i].v=b;
			edges[i].w=c;
		}
		qsort(edges,m,sizeof(edges[0]),cmp);
		Kruskal();
	}
	//system("pause");
	return 0;
}

相关文章推荐

ZOJ 2966 Build The Electric System MST

题意抽象一下:初始:一个图中有几个连通分支 。你可以连通任意两个点。求在满足使这个图成为连通图的前提下,使你所连的两点间的边的sum(权值)最小。解题思路:这个很容易让人想到Kruskal算法中,构造...
  • zdsfwy
  • zdsfwy
  • 2011年04月08日 10:27
  • 792

ZOJ-2966-Build The Electric System【5th浙江省赛】【最小生成树】

ZOJ-2966-Build The Electric System

ZOJ 2966 Build The Electric System 最小生成树 Kruscal && Prim

Build The Electric System 最小生成树 Kruscal && Prim Build The Electric System Time Limit: 2 Secon...

ZOJ 2966 Build The Electric System【最小生成树】

//2632030 2011-08-18 16:57:56 Accepted 2966 C++ 0 1652 ylwh@Unknown #include #include #incl...

zoj 2966 Build The Electric System(并查集)

题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2966 转载请注明出处:http://blog.csdn.net/...

zoj_2966 Build TheElectric System

B - Build TheElectric System Crawling in process...Crawlingfailed Time Limit:2000MS     Memory Lim...
  • CSDN515
  • CSDN515
  • 2012年07月27日 16:27
  • 538

ZOJ 1965 Build The Electric System

浙江大学OJ果然难一些,数据更加严格啊!在杭电上写的一些AC的程序在这里就是WA,以后编程一定要多注意细节,细节决定成败。加油!!! In last winter, there was a big ...

BNU 16485 Build The Electric System

Build The Electric System Time Limit: 2000ms Memory Limit: 65536KB This problem will be j...

Build The Electric System

Build The Electric System In last winter, there was a big snow storm in South China. The electr...
  • zchlww
  • zchlww
  • 2015年05月05日 11:15
  • 568

ZOJ-2966

好累啊。。好几天没写了,今天不知道怎么回事效率特别低,半个下午加一个晚上就一道。感觉写起来各种不顺和无从下手,其实用JAVA早写好了,后来又用C想用二叉堆来做的,各种不顺手。。最终放弃了,简单地用了个...
  • xhldtc
  • xhldtc
  • 2014年02月09日 23:38
  • 357
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:zoj 2966 Build The Electric System(MST)
举报原因:
原因补充:

(最多只允许输入30个字)