kuangbin专题六、最小生成树

题意:给你一个无向图,每个点都是大写字母,让你计算最小生成树的权值

ps:%c最好别用,%s才是最好的选择,大写字母转化成对应的序列位置可以 -‘A‘+1

然后fa[maxn]要初始化,edges[maxn*maxn]的大小要maxn*maxn,还要按边权排个序...

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 using namespace std;
 6
 7 int n;
 8 int fa[27];
 9 struct Edge{
10     char u,v;
11     int w;
12 }edges[27*27];
13
14 bool cmp(Edge a,Edge b)
15 {
16     return a.w<b.w;
17 }
18 int find(int x)   //找到x的爸爸
19 {
20     if(fa[x]!=x)fa[x]=find(fa[x]);
21     return fa[x];
22 }
23
24 int main()
25 {
26     while(~scanf("%d",&n) && n)
27     {
28         int m,cnt=0;
29         char x[3],y[3];
30         int d;
31         for(int i=1;i<=n;i++)
32             fa[i]=i;           //初始化
33         for(int i=1;i<n;i++)
34         {
35             scanf("%s%d",&x,&m);
36             for(int j=0;j<m;j++)
37             {
38                 scanf("%s%d",&y,&d);   //存图
39                 edges[cnt].u=x[0]-‘A‘+1;
40                 edges[cnt].v=y[0]-‘A‘+1;
41                 edges[cnt++].w=d;
42             }
43         }
44         sort(edges,edges+cnt,cmp);  //按边权排序,从小到大
45         int ans=0;
46         for(int i=0;i<cnt;i++)
47         {
48             int x=find(edges[i].u);
49             int y=find(edges[i].v);
50             if(x!=y)
51             {
52                 ans+=edges[i].w;
53                 fa[x]=y;
54             }
55         }
56         cout<<ans<<endl;
57     }
58     return 0;
59 }

时间: 2024-08-01 10:47:00

kuangbin专题六、最小生成树的相关文章

[kuangbin带你飞]专题六 最小生成树

学习最小生成树已经有一段时间了 做一些比较简单的题还算得心应手..花了三天的时间做完了kuangbin的专题 写一个题解出来记录一下(虽然几乎都是模板题) 做完的感想:有很多地方都要注意 n == 1 注意double 的精度问题 poj 1251 模板题 大写字母减去'A'+1即是它的编号 #include<stdio.h> #include<string.h> #include<algorithm> #include<map> #include<m

[kuangbin带你飞]专题六 最小生成树 POJ 2421 Constructing Roads

给一个n个点的完全图 再给你m条道路已经修好 问你还需要修多长的路才能让所有村子互通 将给的m个点的路重新加权值为零的边到边集里 然后求最小生成树 1 #include<cstdio> 2 #include<iostream> 3 #include<algorithm> 4 #include<cmath> 5 #include<cstring> 6 #include<string> 7 #define cl(a,b) memset(a

[kuangbin带你飞]专题六 最小生成树 G - Arctic Network

G - Arctic Network 题目链接:https://vjudge.net/contest/66965#problem/G 题目: 国防部(DND)希望通过无线网络连接几个北部前哨站.在建立网络时将使用两种不同的通信技术:每个前哨站都有一个无线电收发器,一些前哨站还有一个卫星信道.    任何带卫星频道的两个前哨站都可以通过卫星进行通信,无论其位置如何.否则,两个前哨只有当它们之间的距离不超过D时才可以通过无线电进行通信,这取决于收发器的功率.更高的功率产生更高的D但成本更高.由于采购

[kuangbin带你飞]专题六 最小生成树 J - Borg Maze

J - Borg Maze 题目链接:https://vjudge.net/contest/66965#problem/J 题目: 博格是一个非常强大的种族,它来自银河系的三角洲象限.博格集体是用来描述博格文明群体意识的术语.每个博格人都通过复杂的子空间网络与集体联系,确保每个成员得到持续的监督和指导. 你的任务是帮助博格(是的,真的)通过开发一个程序,帮助博格估计扫描迷宫的最低成本,以便同化隐藏在迷宫中的外星人,在北部,西部,东部和南部移动脚步.棘手的是,搜索的开始是由100多个人组成的.每当

[kuangbin带你飞]专题六 最小生成树 K - The Unique MST (判断最小生成树是否唯一)

K - The Unique MST 题目链接:https://vjudge.net/contest/66965#problem/K 题目: 给定连接的无向图,告诉它的最小生成树是否唯一. 定义1(生成树):考虑连通的无向图G =(V,E). G的生成树是G的子图,比如T =(V',E'),具有以下属性:    1. V'= V.    2.T是连接的和非循环的. 定义2(最小生成树):考虑边加权,连通,无向图G =(V,E). G的最小生成树T =(V,E')是总成本最小的生成树. T的总成本

开发指南专题六:JEECG微云快速开发平台代码生成

开发指南专题六:JEECG微云快速开发平台代码生 1.1. 代码生成扫描路径配置 用代码生成器生成代码后,需要进行相关配置配置,扫描注入control.service.entity等; 详细操作步骤如下: 1. control扫描配置,在spring-mvc.xml文件里面 2. Service扫描路径配置, spring-mvc-hibernate.xml 3. 实体Entity扫描路径配置, spring-mvc-hibernate.xml 1.2. 功能测试 1.2.1. 添加菜单并授权

Unity热更新专题(六)uLua简介

Unity热更新专题(六)uLua简介 Unity热更新的解决方案中,uLua无疑是比较好的一种. 所以我们先来介绍一下uLua. 之前文章提到的Lua以及LuaInterface的学习,都是为了学习uLua来做基础的. 关于uLua的学习,我们可以参考官网,以及官方bbs来学习.上面有详细的视频文字教程. 官网:http://www.ulua.org/index.html 官方bbs:http://bbs.ulua.org/ 学习uLua有以上资料就够了. ==================

[C# 网络编程系列]专题六:UDP编程

转自:http://www.cnblogs.com/zhili/archive/2012/09/01/2659167.html 引用: 前一个专题简单介绍了TCP编程的一些知识,UDP与TCP地位相当的另一个传输层协议,它也是当下流行的很多主流网络应用(例如QQ.MSN和Skype等一些即时通信软件传输层都是应用UDP协议的)底层的传输基础,所以在本专题中就简单介绍下UDP的工作原理和UDP编程的只是,希望可以对刚接触网络编程的朋友起到入门的作用. 一.UDP介绍 UDP和TCP都是构建在IP层

kuangbin专题四 : 最短路 I 题 Arbitrage

kuangbin专题四 : 最短路 I 题  Arbitrage POJ 2240 Arbitrage is the use of discrepancies in currency exchange rates to transform one unit of a currency into more than one unit of the same currency. For example, suppose that 1 US Dollar buys 0.5 British pound,