Hdu oj 1233 还是畅通工程

分析:Kruskal算法思想:按照边的权值的顺序从小到大查看一遍,如果不产生环(重边也算在内),就把当前这条边加入到生成树中。

#include<stdio.h>
#include<algorithm>
using namespace std;
int per[110];
int n;
struct stu
{
	int u,v,w;
}edge[10000];
int cmp(stu x,stu y)
{
	return x.w<y.w;
}
void init()
{
	for(int i=1;i<=110;i++)
	per[i]=i;
}
int find(int x)
{
	if(x==per[x])
	return x;
	else
	return per[x]=find(per[x]);
}
bool join(int x,int y)
{
	int fx=find(x),fy=find(y);
	if(fx!=fy)//确定是否生成环
    {
    	per[fy]=fx;
    	return true;
    }
	else
	return false;
}
int main()
{

	while(scanf("%d",&n),n)
	{
		int i,sum=0,m;
		m=n*(n-1)/2;
		init();
		for(i=0;i<m;i++)//注意下标
		scanf("%d%d%d",&edge[i].u,&edge[i].v,&edge[i].w);
		sort(edge,edge+m,cmp);//注意下标
		for(i=0;i<m;i++)
		{
			if(join(edge[i].u,edge[i].v))
			sum+=edge[i].w;
		}
		printf("%d\n",sum);
	}
	return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-08 23:56:36

Hdu oj 1233 还是畅通工程的相关文章

HDU ACM 1233 还是畅通工程

畅通工程的升级版. 求最小生成树.Kruskal 算法:应用并查集. #include<iostream> #include<algorithm> using namespace std; int p[102]; bool Init(int n) //一开始指向自己 { for(int i=0;i<=n;i++) p[i]=i; return true; } int Find(int x) //找到根节点 { int r,i,j; r=x; while(r!=p[r]) r=

[2016-04-13][HDU][1233][还是畅通工程]

时间:2016-04-13 23:56:49 星期三 题目编号:[2016-04-13][HDU][1233][还是畅通工程] 题目大意:求最小生成树 分析:直接kruskal #include<cstdio> #include<algorithm> using namespace std; const int maxn = 100 + 10; int fa[maxn]; struct Edge{ int u,v,c; Edge(int _u= 0,int _v=0,int _c=

【裸MST:prim+邻接矩阵 / Kruskal+邻接表】hdu 1233 还是畅通工程

Source : hdu 1233 还是畅通工程 http://acm.hdu.edu.cn/showproblem.php?pid=1233 Problem Description 某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离.省政府"畅通工程"的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可),并要求铺设的公路总长度为最小.请计算最小的公路总长度. Input 测试输入包含若干测试用例.每个测试用例的第1行给出村庄

hdu 1233 还是畅通工程 (最小生成树)

hdu 1233 还是畅通工程 Description 某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离.省政府"畅通工程"的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可),并要求铺设的公路总长度为最小.请计算最小的公路总长度. Input 测试输入包含若干测试用例.每个测试用例的第1行给出村庄数目N ( < 100 ):随后的N(N-1)/2行对应村庄间的距离,每行给出一对正整数,分别是两个村庄的编号,以及此两村

HDOJ 1233 还是畅通工程 【最小生成树】+【prim】

题意:... 策略:最最典型的prim算法. 代码: #include<stdio.h> #include<string.h> #define INF 0x3f3f3f3f #define MAXN 105 int map[MAXN][MAXN], di[MAXN], vis[MAXN]; int n; int prim() { int i, j, min, pos; memset(vis, 0, sizeof(vis)); memset(di, 0, sizeof(di)); p

hduoj 1233 还是畅通工程 (最小树)

题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1233 还是畅通工程 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 40310    Accepted Submission(s): 18325 Problem Description 某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的

Kruskal HDOJ 1233 还是畅通工程

题目传送门 1 /* 2 最小生成树之kruskal算法--并查集(数据结构)实现 3 建立一个结构体,记录两点和它们的距离,依照距离升序排序 4 不连通就累加距离,即为最小生成树的长度 5 */ 6 #include <cstdio> 7 #include <algorithm> 8 #include <cstring> 9 #include <cmath> 10 using namespace std; 11 12 const int MAXN = 5e

hdu 1233 还是畅通工程 kruskal最小生成树并查集实现

http://acm.hdu.edu.cn/showproblem.php?pid=1233 杭电ACM暑期集训队的选拔 还是畅通工程 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 30319    Accepted Submission(s): 13542 Problem Description 某省调查乡村交通状况,得到的统计表中列

HDU 1233 还是畅通工程【最小生成树入门题,Kruskal算法+Prim算法】

还是畅通工程 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 39929    Accepted Submission(s): 18144 Problem Description 某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离.省政府"畅通工程"的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路