hdu1863(最小生成树)
2024-08-25 17:47:28
很裸的最小生成树,但要注意判断输出问号的情况。其实就是当给的图不是连通图时输出问号。判断方法是:看形成的最小生成树的边数是不是等于节点数减一。
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<map>
#include<set>
#include<vector>
#include<algorithm>
#include<stack>
#include<queue>
using namespace std;
#define INF 1000000000
#define eps 1e-8
#define pii pair<int,int>
#define LL long long int
int n,m,p[],num;
LL ans;
struct node
{
int u,v;
LL w;
} e[];
bool cmp(node aa,node bb)
{
return aa.w<bb.w;
}
int finds(int x)
{
return p[x]==x?x:p[x]=finds(p[x]);
}
int main()
{
// freopen("in1.txt","r",stdin);
//freopen("out.txt","w",stdout);
while(scanf("%d%d",&n,&m)==)
{
if(n==) break;
ans=;
num=;
for(int i=; i<n; i++)
{
scanf("%d%d%I64d",&e[i].u,&e[i].v,&e[i].w);
}
for(int i=; i<=m; i++)
{
p[i]=i;
}
sort(e,e+n,cmp);
for(int i=; i<n; i++)
{
int x=finds(e[i].u);
int y=finds(e[i].v);
if(x!=y)
{
ans+=e[i].w;
num++;
p[x]=y;
}
}
if(num==m-)
printf("%I64d\n",ans);
else
printf("?\n");
}
//fclose(stdin);
//fclose(stdout);
return ;
}
最新文章
- 两台装有Ubuntu系统的服务器搭建VPN(一台为本地服务器,另一台为云服务器)
- linux批量删除进程
- 获取当前IP地址,跳转到对应城市网站。
- android 学习随笔二十六(动画:属性动画)
- [转] 苹果所有常用证书,appID,Provisioning Profiles配置说明及制作图文
- HDU 5705 Clock (精度控制,暴力)
- firebug js版
- U盘开发之SSD对比
- ubuntu12 下怎样上网
- EAS(学生管理系统)初建
- bzoj4665 小w的喜糖(dp+容斥)
- ECC算法软件保护中的应用
- Ubuntu14.04安装 ROS 安装步骤和问题总结
- LOJ-10097(2-sat问题)
- 【C#复习总结】细说 Lambda表达式
- log4j平稳升级到log4j2
- ST算法详解
- hdu 5651 xiaoxin juju needs help 逆元 两种求解方式
- [IDE]快捷键整理
- CSS通过设置position定位的三种常用定位