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
  • 814

ZOJ 2966 Build The Electric System

In last winter, there was a big snow storm in South China. The electric system was damaged seriously...
  • jtjy568805874
  • jtjy568805874
  • 2017年02月17日 21:21
  • 89

ZOJ 2966 Build The Electric System

题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2966 Build The Electric System ...
  • CSUST_ACM
  • CSUST_ACM
  • 2012年09月15日 23:48
  • 1945

zoj 2966 Build The Electric System

Build The Electric System Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Jav...
  • zhangxiaoxiang123
  • zhangxiaoxiang123
  • 2015年08月13日 21:12
  • 757

ZOJ 2966 Build The Electric System 最小生成树

ZOJ 2966 Build The Electric System 题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemC...
  • u012377575
  • u012377575
  • 2014年06月27日 14:54
  • 648

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

ZOJ Problem Set - 2966 Build The Electric System Time Limit: 2 Seconds      Memory Limit: 65536 K...
  • liuke19950717
  • liuke19950717
  • 2015年08月13日 20:26
  • 481

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

题意大致就是连通所有点的需要的最小代价,典型的最小生成树。本人用了Prim来算。 #include #include #include #include #include #define ...
  • u013163567
  • u013163567
  • 2014年02月24日 19:30
  • 482

ZOJ 2966 Build The Electric System(最小生成树)

题目链接:http://vj.hsacm.com/problem/visitOriginUrl.action?id=74919 思路:裸prim算法 水题#include #include #in...
  • pootree
  • pootree
  • 2016年02月19日 17:30
  • 454

zoj 2966 Build The Electric System ( prim || kruskal~ )

做的这几道基本都是一样的。。。。 prim纠结死了,SE了好多次。。。后来发现是要在赋值的时候 map[x][y] = map[y][x] = len; 原来忘了把两条路都弄上,只弄了一个。。。 kr...
  • zxy_snow
  • zxy_snow
  • 2010年09月16日 14:55
  • 1236

zoj 2966 Build The Electric System(并查集)

题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2966 转载请注明出处:http://blog.csdn.net/...
  • u012860063
  • u012860063
  • 2014年03月16日 10:55
  • 991
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:zoj 2966 Build The Electric System(MST)
举报原因:
原因补充:

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