时限: 1000MS   内存限制: 10000K
提交总数: 37001   接受: 17398

描述

热带岛屿拉格里山的首长有个问题。几年前,大量的外援花在了村庄之间的额外道路上。但是丛林不断地超越道路,因此庞大的道路网太昂贵而无法维护。老年人理事会必须选择停止维护一些道路。左上方的地图显示了目前正在使用的所有道路,以及每月维护这些道路的费用。当然,即使路线不像以前那么短,也需要采取某种方式在所有村庄之间保持通行。长老院长想告诉长老委员会每月要花多少钱才能维持连接所有村庄的道路。在上面的地图中,这些村庄被标记为A到I。右边的地图显示了可以最便宜地维护的道路,每月可节省216英亩。您的任务是编写一个解决此类问题的程序。

输入

输入由1到100个数据集组成,后面是仅包含0的最后一行。每个数据集都从仅包含数字n的行开始,n是村庄的数目,1 <n <27,并标记了村庄字母的前n个字母大写。每个数据集都以n-1行完成,这些行以字母顺序的村庄标签开头。最后一个村庄没有电话。村庄的每条线均以村庄标签开头,后跟从该村庄到带有字母标签的村庄的道路的数量k。如果k大于0,则该行以k条道路中的每条道路的数据继续。每条道路的数据是道路另一端的村庄标签,其后是道路的每月维护成本(以acms为单位)。维护成本将为小于100的正整数。该行中的所有数据字段均由单个空格分隔。公路网将始终允许所有村庄之间的旅行。该网络永远不会超过75条道路。到其他村庄的村庄中,没有一条道路会超过15条(在字母表中的前后)。在下面的示例输入中,第一个数据集与上面的地图一起显示。

产量

每个数据集的输出为每行一个整数:维护连接所有村庄的道路系统的每月最低费用(以aacms计)。警告:检查每条可能的道路的暴力解决方案都不会在一分钟的时间内完成。

样本输入

9
A 2 B 12 I 25
B 3 C 10 H 40 I 8
C 2 D 18 G 55
D 1 E 44
E 2 F 60 G 38
F 0
G 1 H 35
H 1 I 35
3
A 2 B 10 C 40
B 1 C 20
0

样本输出

216
30

资源

裸题,看不懂的话多看看图即可!

#include<iostream>
#include<queue>
#include<algorithm>
#include<set>
#include<cmath>
#include<cstdio>
//---------------------------------Sexy operation--------------------------//#define cini(n) scanf("%d",&n)
#define dis(a,b,c,d) ((double)sqrt((a-c)*(a-c)+(b-d)*(b-d)))
using namespace std;
//___________________________Dividing Line__________________________________/#
#define N 105
using namespace std;int father[28];
int rank[28];
int sum;
struct edge
{int st;int ed;int w;bool operator< (const edge x)const{return w<x.w;}
} e[400];
int top = 0;
int find(int x)
{if(x != father[x])father[x] =  find(father[x]);return father[x];
}
void addEdge(int x, int y, int z)
{e[top].st = x;e[top].ed = y;e[top].w =  z;top++;
}
int main()
{int n,cnt,ans;char a,c;int edgeNum;int weight1;while(~scanf("%d",&n)&&n){top =cnt=ans=0;for(int i = 0; i < n -1 ; i++){cin>>a;cin>>edgeNum;for(int j = 0; j < edgeNum; j++){cin>>c;cin>>weight1;int k = int(c - 'A');addEdge(i, k, weight1);}}for(int i = 0; i <= n; i++){father[i] = i;}//cout<<1<<endl;sort(e,e+top);for(int i=1;i<=n;i++) father[i]=i;//cout<<1<<endl;for(int i=0;i<top;i++){int xx=find(e[i].st),yy=find(e[i].ed);if(xx!=yy){cnt++;ans+=e[i].w;father[yy]=xx;if(cnt==n-1) break;}}cout<<ans<<endl;}return 0;
}

poj1251 Jungle Roads Kruskal算法+并查集相关推荐

  1. UVA10034 Freckles【Kruskal算法+并查集】

    In an episode of the Dick Van Dyke show, little Richie connects the freckles on his Dad's back to fo ...

  2. 最小生成树kruskal算法并查集版 C语言实现

    今天数据结构课讲了最小生成树的Kruskal算法和Prim算法,不过都只是概念,可能是怕他们听不懂吧,反正算法实现一概不讲...囧 下午抱着<算法导论>跑去图书馆看Kruskal算法,发现 ...

  3. HDOJ 1863畅通工程(最小生成树kruskal算法并查集实现)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1863 最小生成树kruskal算法:http://www.zhuoda.org/irini/78592.h ...

  4. HDU1875 畅通工程再续【Kruskal算法+并查集】

    畅通工程再续 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

  5. HDU1233 还是畅通工程【Kruskal算法+并查集】

    还是畅通工程 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub ...

  6. HDU1863 畅通工程【Kruskal算法+并查集】

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

  7. 最小生成树KrusKal算法(并查集)

    洛谷p1111链接 克鲁斯卡尔算法的思路就是由森林变成树的过程,其中最主要的就是贪心和并查集的应用. 我们知道链接n个点需要n-1条边,这就满足的最后生成的是一颗树,而不是一个环.在这n-1条边的选择 ...

  8. 最小生成树Kruskal算法+并查集检查连通

    /* 10 6 1 2 6 1 3 1 1 4 5 2 3 5 2 5 3 3 4 5 3 5 6 3 6 4 4 6 2 5 6 6 */// 本例解决最小生成树问题 // 并查集来加快效率 // ...

  9. Kruskal 算法——并查集

    需要注意的地方 :将所有的边权从小到大依次排序,按从小到大依次加入边,每次对加入的边进行如下操作: 1.找出边的两点. 2.判断两点的父亲节点是在同一个集合里. 3.如果不在同一个集合,在将两点所在的 ...

最新文章

  1. Python天天美味(13) - struct.unpack
  2. C#中ToString()格式大全(转)
  3. Dalvik Virtual Execution with SmaliVM
  4. 关于动态生成div的认识
  5. ES6 javascript 实用开发技巧 1
  6. OpenCV 访问Mat 像素
  7. 关键词堆砌生成器_网络推广软件的使用和24种关键词挖掘方法
  8. OI生涯回忆录(Part5:至初中竞赛生涯完)
  9. 基于飞桨实现高光谱影像和全色影像融合
  10. 超越Nest:集智能温控和家庭控制的Cosy
  11. JDK 9-17 新特性介绍
  12. Python的并发并行[1] - 线程[3] - 多线程的同步控制
  13. Minio集群搭建之查看元数据信息
  14. 迈阿密大学的计算机系咋样,迈阿密大学牛津分校计算机专业如何?过来人告诉你...
  15. Linux下mysql 登录退出及常用命令
  16. SAP Spartacus Early Login
  17. 驱动你做一件事的动力来源是什么?
  18. 论文解读:GAN与检测网络多任务/SOD-MTGAN: Small Object Detection via Multi-Task Generative Adversarial Network
  19. 国外导师对博士后申请简历的几点建议
  20. FocusBI:租房分析星型模型

热门文章

  1. 图片插值数据_结合PS用这招来增强ArcGIS插值图出图效果
  2. 协议类接口 - NAND
  3. BufferFsStream
  4. Python面向对象-概念、类、实例
  5. MySQL Thread pool 操作过程
  6. Basic Calculator
  7. 搜索引擎分布式爬虫介绍
  8. 学习笔记之Java程序设计实用教程
  9. 个人专著推荐1:Red Hat Linux 9实务自学手册(含光盘)
  10. CString,string,char数组的转换