很裸的最小生成树,但要注意判断输出问号的情况。其实就是当给的图不是连通图时输出问号。判断方法是:看形成的最小生成树的边数是不是等于节点数减一。

#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 ;
}

最新文章

  1. 两台装有Ubuntu系统的服务器搭建VPN(一台为本地服务器,另一台为云服务器)
  2. linux批量删除进程
  3. 获取当前IP地址,跳转到对应城市网站。
  4. android 学习随笔二十六(动画:属性动画)
  5. [转] 苹果所有常用证书,appID,Provisioning Profiles配置说明及制作图文
  6. HDU 5705 Clock (精度控制,暴力)
  7. firebug js版
  8. U盘开发之SSD对比
  9. ubuntu12 下怎样上网
  10. EAS(学生管理系统)初建
  11. bzoj4665 小w的喜糖(dp+容斥)
  12. ECC算法软件保护中的应用
  13. Ubuntu14.04安装 ROS 安装步骤和问题总结
  14. LOJ-10097(2-sat问题)
  15. 【C#复习总结】细说 Lambda表达式
  16. log4j平稳升级到log4j2
  17. ST算法详解
  18. hdu 5651 xiaoxin juju needs help 逆元 两种求解方式
  19. [IDE]快捷键整理
  20. CSS通过设置position定位的三种常用定位

热门文章

  1. 剑指offer 面试25题
  2. cookie、Session工作原理
  3. 如何安装/更新ruby,安装cocoapods,为开发做好准备!(2016年12月07日更新内容)
  4. VC6.0中添加库文件和头文件
  5. public,protected,privat区别
  6. windows下载Mysql-python
  7. Python与硬件学习笔记:蜂鸣器(转)
  8. [NOI2008]奥运物流
  9. php数组函数-array_flip()
  10. Python的return self和return一个新的对象区别