公路建设(最小生成树)

Posted SSL_LKJ

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了公路建设(最小生成树)相关的知识,希望对你有一定的参考价值。

公路建设

在这里插入图片描述
在这里插入图片描述

解题思路

kuraskal算法

AC代码

#include<algorithm>
#include<cstdio>
using namespace std;
int n,m,o,f[505];
struct node
{
	int x,y,z;
}a[4005];
bool cmp(node x,node y)
{
	return x.z<y.z;
}
int find(int x)
{
	if(f[x]==x)return x;
	else return f[x]=find(f[x]);
}
int main()
{
	scanf("%d%d",&n,&m);
	for(int i=1;i<=m;i++)
	{
		o++;
		scanf("%d%d%d",&a[o].x,&a[o].y,&a[o].z);
		int xx=o;
		o++;
		a[o].x=a[xx].y;//初值
		a[o].y=a[xx].x;
		a[o].z=a[xx].z;
		for(int j=1;j<=n;j++)f[j]=j;
		sort(a+1,a+o+1,cmp);
		int ans=0,tot=0;
		for(int j=1;j<=o;j++)
		{
			int xx=find(a[j].x),yy=find(a[j].y);//查找
			if(xx!=yy)//判断是否同一集合
			{
				ans+=a[j].z;
				f[xx]=yy;
				tot++;
				if(tot==n-1){printf("%.1lf\\n",ans*1.0*0.5);break;}
			}
		}
		if(tot!=n-1)printf("0\\n");
	}
	return 0;
}

谢谢

以上是关于公路建设(最小生成树)的主要内容,如果未能解决你的问题,请参考以下文章

BZOJ 1196 公路修建问题(二分+最小生成树)

HDU 1863 畅通project (最小生成树)

ybtoj最小生成树例题3公路建设

省选十连测之一线段树最小生成树之Kruskal公路建设

POJ1751 Highways最小生成树

hdu1233+最小生成树