总时间限制: 1000ms 内存限制: 10000kB

描述

很久很久以前,森林里住着一群兔子。兔子们无聊的时候就喜欢研究星座。如图所示,天空中已经有了n颗星星,其中有些星星有边相连。兔子们希望删除掉一些边,然后使得保留下的边仍能是n颗星星连通。他们希望计算,保留的边的权值之和最小是多少?

输入

第一行只包含一个表示星星个数的数n,n不大于26,并且这n个星星是由大写字母表里的前n个字母表示。接下来的n-1行是由字母表的前n-1个字母开头。最后一个星星表示的字母不用输入。对于每一行,以每个星星表示的字母开头,然后后面跟着一个数字,表示有多少条边可以从这个星星到后面字母表中的星星。如果k是大于0,表示该行后面会表示k条边的k个数据。每条边的数据是由表示连接到另一端星星的字母和该边的权值组成。权值是正整数的并且小于100。该行的所有数据字段分隔单一空白。该星星网络将始终连接所有的星星。该星星网络将永远不会超过75条边。没有任何一个星星会有超过15条的边连接到其他星星(之前或之后的字母)。在下面的示例输入,数据是与上面的图相一致的。

输出

输出是一个整数,表示最小的权值和

样例输入

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

样例输出

216

分析

就是最小生成树的裸题,Prim和Kruskal算法都可以,下面给的代码是Kruskal算法实现的

AC的C++代码

#include<iostream>
#include<cstring>
#include<cctype>
#include<algorithm>
int n, m, fa[200005], Size[200005], cnt = 0;
using namespace std;struct edge {int u, v, w;
};
edge e[5000];//代表当前已经输入边的数目
int num_e=1;
//读入一行的数据
void read() {char c, c1;int u, v, w, t;cin >> c >> t;u = c - 64;       //将字母转换为数字储存while (t--) {cin >> c1 >> w;v = c1 - 64;e[num_e].u = u;e[num_e].v = v;e[num_e].w = w;num_e++;}
}//判断边权重大小
bool cmp(edge x, edge y) {return x.w < y.w;
}int findFather(int x) {if (x == fa[x])return x;elsereturn findFather(fa[x]);
}void Union(int a, int b) {int fx = findFather(a);     //寻找a的根结点int fy = findFather(b);   //寻找b的根结点if (Size[fx] >= Size[fy]) {fa[fy] = fx;Size[fx] += Size[fy];}else {fa[fx] = fy;Size[fy] -= Size[fx];}}int main() {cin >> n;for (int i = 1; i < n; i++) {read();}num_e--;for (int i = 1; i <= num_e; i++)fa[i] = i, Size[i] = 1;//由小到大排序 sort(e + 1, e + num_e + 1, cmp);long long ans = 0;for (int i = 1; i <= num_e; i++) {if (findFather(e[i].u) == findFather(e[i].v))continue;Union(e[i].u, e[i].v);cnt++;ans += e[i].w;if (cnt == n - 1)break;}cout << ans;return 0;
}

【题解】(图论) —— POJ 0714:兔子与星空相关推荐

  1. NOIP 好题推荐(DP+搜索+图论)POJ ZOJ

    NOIP好题推荐(DP+搜索+图论)POJ ZOJ 1370 Gossiping (数论->模线性方程有无解的判断)+(图论->DFS)  1090 Chain ->格雷码和二进制码 ...

  2. 我花了三个小时写了一道题的六千字题解....(POJ 2888 Magic Bracelet)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 前置知识:小学生都能看懂的群论从入门到升天教程 <群论全家桶> 一道简单的题目 Probl ...

  3. 【题解】POJ 3069 Saruman's Army(贪心)

    POJ 3069 Saruman's Army 原题 https://vjudge.net/problem/POJ-3069 白种人萨鲁曼必须带领他的军队沿着从艾辛格到圣盔谷的直线前进.为了跟踪他的部 ...

  4. PAT甲级1139 First Contact (30 分):[C++题解] 图论、暴力枚举两个点、hash映射

    文章目录 题目分析 题目链接 题目分析 来源:acwing 题目分析: 图论模拟题. 给定暗恋的两个人A 和B,需要寻找一对C 和D ,满足:A和C是朋友,C和D是朋友,D和B是朋友.而且A.C同性别 ...

  5. 【题解】POJ 1852 Ants(搜索)

    POJ1852 Ants 目录 POJ1852 Ants 原题 题意 题解 原题 An army of ants walk on a horizontal pole of length l cm, e ...

  6. PAT甲级1076 Forwards on Weibo (30 分) :[C++题解]图论、bfs

    文章目录 题目分析 题目来源 题目分析 来源:acwing 分析: BFS如何搜前k层?统计前k层的点数. ac代码 #include<bits/stdc++.h> using names ...

  7. PAT甲级1154 Vertex Coloring :[C++题解]图论、模拟、结构体存边

    文章目录 题目分析 题目链接 题目分析 来源:acwing 分析: 这题的边不用邻接矩阵.邻接表来存,仅仅用结构体来存即可,结构体正好存边的两个端点,我们只要遍历每条边,判断端点的颜色是否相同即可. ...

  8. PAT甲级1142 Maximal Clique :[C++题解]图论、最大团、枚举

    文章目录 题目分析 题目链接 题目分析 来源:acwing 分析: 团:团是顶点的集合,满足该集合中任意两顶点之间都有边. 判断是不是团:所有点是否有边 判断最大团:是否可以加一个额外点,使得所有点之 ...

  9. PAT甲级1122 Hamiltonian Cycle:[C++题解] 图论、模拟

    文章目录 题目分析 题目链接 题目分析 分析 哈密顿回路:从1个点出发,经过所有点一次,然后回到起点. 四个特点: 1)回路必须包含n+1个点:2)回路是个环,第一点和最后一个点相等:3)回路中相邻两 ...

最新文章

  1. python dataframe显示网格_python dataframe 输出结果整行显示的方法
  2. poj 2337 Catenyms 【欧拉路径】
  3. 用IP地址的用途理解Loopback接口
  4. 100行的python作品详解_不到 100 行 Python 代码徐峥变葛优
  5. python中可变参数和关键字参数_python的可变参数和关键字参数(*args **kw)
  6. C++二维数组讲解、二维数组的声明和初始化
  7. Windows:系统环境变量配置提示系统环境变量太大的问题三种解决方案亲测可用
  8. 成为Web开发大师你必须知道的7件事情
  9. 使用camera_calibration对xtion pro live深度相机进行参数标定,rosdep install camera_calibration报错Rosdep cannot find
  10. toString() 和 强制类型转换 (String)
  11. redis源码分析 ppt_Redis源码分析之客户端+数据库
  12. 计算机学业测试答案解析,计算机测试题及答案.doc
  13. 将 PAGE_VERIFY 数据库选项设置为 CHECKSUM
  14. laravel 运用
  15. mysql超市管理系统怎么写_vb6.0+mysql编写的小型超市管理系统
  16. 计算机病毒大多数具有自身复制的功能,《计算机基础》第五章练习题
  17. linux怎么加块硬盘,如何在Linux下添加第二块scsi硬盘?
  18. 最好用的工程资料软件
  19. 学会这两招将知网下载的CAJ转成Word形式
  20. STM32H743内部所有SRAM的使用

热门文章

  1. Copy(定义,特点,深复制,浅复制)(非ARC,ARC的运用范围)
  2. 当Shell遇上了NodeJS
  3. 指针学习4--合成析构函数做了什么
  4. 请教关于 license.licx 不能转换成2进制文件!(c# 开发web应用程序)
  5. linux系统资源管理系统,linux基础4系统资源管理
  6. 查看及修改当前数据库的所支持的数据库引擎以及默认数据库引擎
  7. Roundcube Webmail跨站脚本漏洞(CVE-2015-5381 )
  8. 20165115 2017-2018-2 《Java程序设计》第六周学习总结
  9. mysql主从复制读写分离
  10. IPC Binder