公路建设
题目链接:公路建设
题目描述
解题思路
暴力插排最小生成树即可。
code
#include<iostream>
#include<cstdio>
using namespace std;
int n,m;
int fa[510];
struct abc{
int x,y,z;
}a[2010];
int fd(int now)
{
if(fa[now]==now)
return now;
return fa[now]=fd(fa[now]);
}
int main()
{
cin>>n>>m;
for(int i=1;i<=m;i++)
{
scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].z);
int k=i-1;
while(a[i].z<a[k].z&&k>=1) k--;
k++;
abc t=a[i];
for(int j=i;j>k;j--)
a[j]=a[j-1];
a[k]=t;
for(int j=1;j<=n;j++)
fa[j]=j;
double ans=0;
k=0;
for(int j=1;j<=i;j++)
{
int fx=fd(a[j].x);
int fy=fd(a[j].y);
if(fx!=fy)
{
k++;
fa[fx]=fy;
ans+=(a[j].z*1.0)/2.0;
if(k==n-1)
break;
}
}
if(k==n-1)
printf("%.1lf\n",ans);
else
cout<<0<<endl;
}
}