畅通工程

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 39468    Accepted Submission(s): 17635

Problem Description

省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可)。经过调查评估,得到的统计表中列出了有可能建设公路的若干条道路的成本。现请你编写程序,计算出全省畅通需要的最低成本。

Input

测试输入包含若干测试用例。每个测试用例的第1行给出评估的道路条数 N、村庄数目M ( < 100 );随后的 N

行对应村庄间道路的成本,每行给出一对正整数,分别是两个村庄的编号,以及此两村庄间道路的成本(也是正整数)。为简单起见,村庄从1到M编号。当N为0时,全部输入结束,相应的结果不要输出。

Output

对每个测试用例,在1行里输出全省畅通需要的最低成本。若统计数据不足以保证畅通,则输出“?”。

Sample Input

3 3 1 2 1 1 3 2 2 3 4 1 3 2 3 2 0 100

Sample Output

3 ?

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<string>
#include<vector>
#include<stack>
#include<bitset>
#include<cstdlib>
#include<cmath>
#include<set>
#include<list>
#include<deque>
#include<map>
#include<queue>
using namespace std; const int maxN = 105; //kruskal
struct node
{
int u;
int v;
int w;
}edges[maxN * maxN]; bool cmp2(const node &a, const node &b)
{
return a.w < b.w;
} int father[maxN];
int Rank[maxN]; void Init(int n)//结点的数量
{
for(int i = 1; i <= n; i++)
{
father[i] = i;
Rank[i] = 1;
}
} int Find(int x)
{
if(x != father[x])
father[x] = Find(father[x]);
return father[x];
} void Union(int x, int y)
{
x = Find(x);
y = Find(y);
if(Rank[x] < Rank[y])
father[x] = y;
else
{
if(Rank[x] == Rank[y])
Rank[x]++;
father[y] = x;
}
} void Kruskal(int n, int m)
{
Init(n);
int sum = 0;
int cnt = 0;
for(int i = 0; i < m; i++)
{
if(Find(edges[i].u) != Find(edges[i].v))
{
Union(edges[i].u, edges[i].v);
cnt++;
sum += edges[i].w;
}
}
if(cnt != n - 1)
cout << "?" << endl;
else
cout << sum << endl;
} int main()
{
int m, n;//way, node
int u, v, w;
while(cin >> m >> n && m)
{
int cnt = 0;
for(int i = 0; i < m; i++)
{
cin >> u >> v >> w;
edges[cnt].u = u;
edges[cnt].v = v;
edges[cnt++].w = w;
}
sort(edges, edges + cnt, cmp2);
Kruskal(n, m);
}
return 0;
}

最新文章

  1. scala 学习: case class
  2. 在CentOS6.7操作系统上编译安装httpd2.4
  3. Struts2配置拦截器,struts2加载常量时的搜索顺序
  4. 滚珠菜单动效-b
  5. 学无止境,学习AJAX,跨域(三)
  6. 通过模拟器和ida搭建Android动态调试环境的问题
  7. web.config详解
  8. &lt;span&gt;什么意思
  9. 转 json数组对象和对象数组
  10. 剖析Asp.Net Web API路由系统---WebHost部署方式
  11. BZOJ-2330-[SCOI2011]糖果(差分约束)
  12. echart异步刷新图表,详细配置注释
  13. elasticsearch搜索引擎环境的搭建
  14. MongoDB 安装 Windows XP
  15. 启用yarn日志聚集功能
  16. python笔记05:条件、循环和其它语句
  17. Unix IPC之基于共享内存的计数器
  18. python 全排列
  19. selenium - Select类 - 下拉框
  20. Java虚拟机1:开篇

热门文章

  1. BCD Code ZOJ - 3494 AC自动机+数位DP
  2. (转)Linux使用RSA密钥登录远程服务器
  3. [Ceoi2016|BZOJ4936] Match
  4. 廖雪峰Java15JDBC编程-3JDBC接口-1JDBC简介
  5. duilib教程之duilib入门简明教程3.第一个程序 Hello World
  6. 反编译之paktool工具
  7. FreeMarker 自定义 TemplateDirectiveModel(二)
  8. C++系列作业
  9. tty who 命令
  10. webGL动画