某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离。省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可),并要求铺设的公路总长度为最小。请计算最小的公路总长度。 

Input测试输入包含若干测试用例。每个测试用例的第1行给出村庄数目N ( < 100 );随后的N(N-1)/2行对应村庄间的距离,每行给出一对正整数,分别是两个村庄的编号,以及此两村庄间的距离。为简单起见,村庄从1到N编号。 
当N为0时,输入结束,该用例不被处理。 
Output对每个测试用例,在1行里输出最小的公路总长度。 
Sample Input

3
1 2 1
1 3 2
2 3 4
4
1 2 1
1 3 4
1 4 1
2 3 3
2 4 2
3 4 5
0

Sample Output

3
5 Huge input, scanf is recommended.
  • 并查集的
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<string>
#include<cstring>
#include<map>
using namespace std;
int n,bc[110],ans;
struct P {
int a, b, c;
bool operator<(const P&a)const {
return c < a.c;
}
}s[5005];
int Find(int i) {
if (bc[i] == i)
return i;
else {
bc[i] = Find(bc[i]);
return bc[i];
}
}
void Join(int a, int b, int idx) {
int x = Find(a), y = Find(b);
if (x != y) {
bc[y] = x;
ans += s[idx].c;
}
}
int main() {
//freopen("in.txt", "r", stdin);
while (scanf("%d",&n)&&n)
{
int m = (n*(n - 1)) / 2;
ans = 0;
for (int i = 1; i <= n; i++)
bc[i] = i;
for (int i = 0; i < m; i++) {
scanf("%d %d %d", &s[i].a, &s[i].b, &s[i].c);
}
sort(s, s + m);
for (int i = 0; i < m; i++)
Join(s[i].a, s[i].b, i);
printf("%d\n", ans);
}
return 0;
}
  •   最小生成树
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<string>
#include<cstring>
#include<map>
using namespace std;
#define inf 0x3f3f3f
int n,ans;
int edge[110],M[110][110];
int main() {
//freopen("in.txt", "r", stdin);
while (scanf("%d",&n)&&n)
{
memset(M, inf, sizeof(M));
int m = (n*(n - 1)) / 2;
ans = 0;
for (int i = 0; i < m; i++) {
int a, b, c;
scanf("%d %d %d", &a, &b, &c);
M[a][b] = M[b][a] = c;
}
bool S[110];
memset(S, 0, sizeof(S));
for (int i = 2; i <= n; i++)
edge[i] = M[1][i];
S[1] = 1;
for (int i = 1; i <= n-1; i++) {
int v=-1, maxl = inf;
for (int j = 2; j <= n; j++)
if (!S[j]&&maxl > edge[j]) {
v = j;
maxl = edge[j];
}
if (v == -1) break;
S[v] = 1;
ans += edge[v];
for (int j = 2; j <= n; j++)
if (!S[j] && M[v][j] < edge[j]) {
edge[j] = M[v][j];
}
}
printf("%d\n", ans);
}
return 0;
}

  

hdu 1233 还是畅通工程 并查集or最小生成树的更多相关文章

  1. HDU.1233 还是畅通工程(Prim)

    HDU.1233 还是畅通工程(Prim) 题意分析 首先给出n,代表村庄的个数 然后出n*(n-1)/2个信息,每个信息包括村庄的起点,终点,距离, 要求求出最小生成树的权值之和. 注意村庄的编号从 ...

  2. hdu 1233 还是畅通工程 (最小生成树)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1233 还是畅通工程 Time Limit: 4000/2000 MS (Java/Others)    ...

  3. HDU 1233 还是畅通工程(Kruskal算法)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1233 还是畅通工程 Time Limit: 4000/2000 MS (Java/Others)   ...

  4. hdu 1863 畅通工程 (并查集+最小生成树)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1863 畅通工程 Time Limit: 1000/1000 MS (Java/Others)    M ...

  5. HDU - 1232 畅通工程-并查集模板

    某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇.省政府“畅通工程”的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要互相间接通过道路可达即可). ...

  6. <hdu - 1232> 畅通工程 并查集问题 (注意中的细节)

    本题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1232  结题思路:因为题目是汉语的,那我就不解释题意了,要求的是最少建设的道路,我们可以用并查集来做这 ...

  7. HDU 1232 畅通工程(并查集)

    畅通工程 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Problem Des ...

  8. HDU 1232 (畅通工程) 并查集经典模板题

    Problem Description 某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇.省政府"畅通工程"的目标是使全省任何两个城镇间都可以实现交通 ...

  9. hdu 1863 畅通工程 (并查集 、 kruskal)

    畅通工程Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

随机推荐

  1. Java 设计模式系列(三)抽象工厂

    Java 设计模式系列(三)抽象工厂 每天用心记录一点点.内容也许不重要,但习惯很重要!

  2. 关闭Found duplicated code

    IDEA中的这个“发现重复代码 - Found duplicated code“的这个提示甚是烦躁. Settings —> Editor —> Inspections —> Gen ...

  3. 移动直播app怎么做

    今年移动直播行业的兴起,诞生了一大批网红,甚至明星也开始直播了,因此不得不跟上时代的步伐,教你从零开始搭建一个完整的iOS直播app,希望能帮助到更多的人更快的了解直播. 了解直播 1 热门直播产品: ...

  4. vue2.0 #$emit,$on的使用

    首先实例化: bus.js import Vue from 'Vue' export default new Vue() 组件1, import bus from '../../assets/js/b ...

  5. SpringMVC源码解析 - HandlerAdapter - HandlerMethodArgumentResolver

    HandlerMethodArgumentResolver主要负责执行handler前参数准备工作. 看个例子,红色部分的id初始化,填充值就是它干的活: @RequestMapping(value ...

  6. IntricCondition和expliciteCondition比较

    IntricCondition 和 expliciteCondition 的区别 与 intrinsicLoc和expliciteLock的区别很相似, expliciteCondition提供了更多 ...

  7. idea jvm 优化

    修改对应配置文件 64位的是idea64.exe.vmoptions -Xms2048m -Xmx2048m -Xmn1024m -XX:PermSize=512m -XX:MaxPermSize=5 ...

  8. cxrichedit导入WORD

    cxrichedit导入WORD word := CreateOLEObject('Word.Application');  word.Documents.Open(l_path,false);  w ...

  9. 基于pscp批量分发文件

    用法: pscp -h 目标ip文件 本地文件路径 远程路径 pscp -h hosts.ip file.txt ~/

  10. IOC容器之Autofac

    讲到IOC容器,就必须提到DIP(依赖倒置原则). DIP是OOD(面向对象设计)的一个重要思想,在该原则上引申出了\IOC(控制反转)\DI(依赖注入)\IOC容器. 居然讲到IOC容器,当然我们要 ...