![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
ACM-图论-生成树
暗金色
这个作者很懒,什么都没留下…
展开
-
HDU - 2121 Ice_cream’s world II(朱刘算法+虚根)
题目大意:给你N个点,M条有向边,问以哪个点为根结点时,能使最小生成树总权值达到最小,输出总权值和根。 如果构不成最小生成树,另外输出解题思路:这题很巧妙,暴力枚举的话,肯定TLE,所以,这题就需要点技巧了 可以设一个虚根,虚根连接每一个点,权值为所有边的总权值+1。接着,以虚根为根,跑朱刘算法。 跑出结果后,要判断一下,如果最小生成树的总权值比2 * (所有边的总权值+1)还要大,表示虚根至原创 2015-08-17 00:24:20 · 1345 阅读 · 0 评论 -
HDU - 4756 Install Air Conditioning(树形DP + 最小生成树)
题目大意:给出N个点的坐标,第0个点是发电站,其他的点都是宿舍,现在要求你求出一个最小生成树 但是有一个问题是, 不知道哪两间宿舍不可以直接相连,所以你要预估一下最小的生成树的权值是多少解题思路:求出最小生成树,然后进行dfs,求出树边割断后,连接两个块的最小值即可一题类似的题HDU 4126 HDU 4126的题解#include <cstdio>#include <cstring>#in原创 2015-09-11 14:43:32 · 503 阅读 · 0 评论 -
HDU - 4966 GGS-DDU (最小树形图)
题目大意:有一个人,想学习N个科目,每个科目都有相应的层次 有M个课程,M个课程的要求是,你的第c个科目的层次要达到l1,才可以参加,参加完这个课程后,你需要缴费money,但你的第d个科目的层次会达到l2 现在问,如何花最少的钱,使得每个科目的层次都达到最高解题思路:每个科目的每个层次都看成一个点,每个科目的层次0和根连边,费用0 每个科目的高层次向下一个低层次连边,费用为0(因为你高层次的原创 2015-09-11 17:19:05 · 543 阅读 · 0 评论 -
UVA - 10099 The Tourist Guide kruskal算法
题目大意:导游要带人去旅游,需要乘坐公交车,公交车有人数限制,导游要把所有人都带到终点,问导游最少要带几趟才能将所有人带到终点解题思路:和噪音的那题相似,要从起点带到终点的次数最少,起点到终点的最小值就要达到最大,小心一点的就是,每次带过去的人应该要减去1个导游#include#include#includeusing namespace std;#define INF 0x3f3原创 2014-12-03 08:34:37 · 800 阅读 · 0 评论 -
UVA - 10369 Arctic Network kruskal算法
题目大意:边防站的每个站点都有无线收音器,有的边防站可以使用卫星来进行通信,通信的前提是两个边防站要拥有共同的卫星频道,卫星通信可以不通过线来连接,无视距离,现在给出有N个卫星频道,S个站点,要求将这S个站点通过线接起来,使其能够相互通信,求连接起来的线的最大值解题思路:求线的最大值,无非就是求第S-N条边的的距离,因为最长的线可以通过卫星连接来消除,有N个卫星频道的话,就可以消除N-1条边,原创 2014-12-03 08:29:12 · 661 阅读 · 0 评论 -
UVA - 10034 Freckles kruskal算法
题目大意:有N个点,要求你将所有的点连接起来,求连接的线段的长度和,要求长度和达到最小解题思路:模板题,就不细说了#include#include#include#includeusing namespace std;const int maxn = 10005;double x[105],y[105];double len[maxn];int r[maxn],p[maxn原创 2014-12-01 16:30:46 · 646 阅读 · 0 评论 -
UVA - 10397 Connect the Campus kruskal算法
题目大意:要在学校搭建校园网,已经将其中几台机器连接起来了,求将其他机器也用线连接起来,使其生成一棵最小生成树,求用的线的长度解题思路:kruskal算法的模板题,先将连接起来的机器的点并起来就可以解决了,记得数组开大点#include#include#include#includeusing namespace std;#define maxn 755#define maxl原创 2014-12-03 08:17:38 · 579 阅读 · 0 评论 -
朱刘算法
最小有向生成树:给定一个有向带权图G和其中一个点u,找出一个以u为跟结点,权和最小的有向生成树。有向生成树也叫树形图,是指一个类似树的有向图,满足以下条件: 1.恰好有一个入度为0的点,称为根结点 2.其他结点的入度均为1 3.可以从根结点到达其他结点算法的主过程如下: 1.找到除了root以为其他点的权值最小的入边。用In[i]记录 2.如果出现除转载 2015-09-11 17:43:31 · 4630 阅读 · 3 评论 -
LightOJ - 1040 Donation(最小生成树)
题目大意:给你一个邻接矩阵,表示两点之间的花费,现在问,花费总和-最小生成树的值 如果最小生成树不存在,另外输出解题思路:模版题#include <cstdio>#include <cstring>#include <algorithm>#include <vector>using namespace std;const int MAXNODE = 110;const int MAXE原创 2015-11-03 23:10:35 · 494 阅读 · 0 评论 -
LightOJ - 1029 Civil and Evil Engineer(最大/小生成树)
题目大意:问最小生成树和最大生成树的平均值解题思路:模版题#include <cstdio>#include <cstring>#include <algorithm>#include <vector>using namespace std;const int MAXNODE = 110;const int MAXEDGE = 12010;typedef int Type;struct原创 2015-11-03 23:09:08 · 518 阅读 · 0 评论 -
LightOJ - 1041 Road Construction(最小生成树)
题目大意:给你N条边,看能否形成最小生成树,如果存在,输出值,不存在,另外输出解题思路:模版题#include <cstdio>#include <cstring>#include <algorithm>#include <vector>#include <map>#include <string>#include <iostream>using namespace std;cons原创 2015-11-03 23:16:00 · 489 阅读 · 0 评论 -
LightOJ - 1380 Teleport(最小树形图)
题目大意:给你一个有向图,问这个有向图中,以k为根的最小树形图解题思路:模版题#include <cstdio>#include <cstring>const int MAXNODE = 1010;const int MAXEDGE = 10010;typedef int Type;const Type INF = 0x3f3f3f3f;struct Edge { int u, v;原创 2015-11-04 22:42:37 · 547 阅读 · 0 评论 -
次小生成树模版(MST)
#include <cstdio>#include <cstring>#include <algorithm>#include <vector>using namespace std;const int MAXNODE = 1010;const int MAXEDGE = 1000010;typedef int Type;struct Edge{ int u, v; T转载 2015-11-04 21:57:33 · 426 阅读 · 0 评论 -
LightOJ - 1002 Country Roads(最小瓶颈路)
题目大意:为i点到任意点的经过的的最长边解题思路:先求出最小生成树,然后在最小生成树的上进行dfs,用maxcost[i][j]维护i点到j点的路径上的最长边 则maxcost[i][j] = max(maxcost[i][f[j]], dist[f[j]][i]) f[j]是j的父结点#include <cstdio>#include <cstring>#include <algorith原创 2015-11-03 23:07:52 · 935 阅读 · 0 评论 -
UVA - 10816 Travel in Desert(枚举+生成树+最短路)
题目大意:给出N个点,M条边,每条边有相应的长度和温度。 现在给出起点和终点,问从起点到终点的路径中,温度最高的最小值是多少,路径路径长度是多少,经过了哪些点解题思路:这题有两种解法第一种:二分最高温度,然后跑最短路 第二种:按照kruscal算法来,按温度升序排序,当起点和终点连通的时候,那个时候的温度就是这条路的最高温度了 接着将所有低于等于该温度的边连成一张图,然后跑最短路即可第一种思路原创 2015-08-22 23:47:15 · 840 阅读 · 0 评论 -
UVALive - 4960 Sensor network(生成树+LCA)
题目大意:给出N个点,M条边,问这N个点形成的生成树的最大权值边-最小权值边的最小值解题思路:先排序,然后按生成树的kruscal算法进行加边,再维护一个最小权值边 加边的时候要考虑一下加下去的边是否会形成环,如果形成环的话,就把环内的最小边去掉,然后再找出这棵新的生成树的最小边等到生成树形成的时候,因为添加进去的新边的权值肯定是最大值的,所以只要只减去之前维护一个的最小值就可以了#include原创 2015-08-22 23:42:26 · 971 阅读 · 0 评论 -
UVA - 11354 Bond(生成树+LCA)
题目大意:给出N个点,M条边,每条边有相应的危险系数 现在有Q个询问,每次询问的是两点之间的路径中的最高危险系数是多少,最高危险系数要最小解题思路:要求的是瓶颈路。按照prim算法求出最小生成树,把1当根结点,遍历这棵最小生成树,纪录每个点的深度,1的深度是1每次询问的时候,就沿路找到两点之间的lca,然后取走的路径的最大值即可#include <cstdio>#include <cstring原创 2015-08-22 23:51:45 · 775 阅读 · 0 评论 -
POJ - 1679 The Unique MST(次小生成树)
题目大意:给你一张图,问最小生成树是不是唯一的解题思路:先将最小生成树求出来,并把形成最小生成树的边标记一下 接着在枚举那些不是最小生成树的边,看添加之后,形成的环中的最大边是否和该边相等,如果相等,则表示最小生成树不唯一#include <cstdio>#include <cstring>#include <vector>using namespace std;#define N 110原创 2015-08-19 23:12:21 · 617 阅读 · 0 评论 -
UVA - 10600 ACM Contest and Blackout(次小生成树)
题目大意:给出一张图,问这张图的最小生成树的权值和次小生成树的权值,如果有两个最小生成树,则输出的权值都为最小生成树的权值解题思路:先找出最小生成树,再标记一下形成最小生成树的树边,接着枚举那些不是树边的边#include <cstdio>#include <cstring>#include <vector>using namespace std;#define N 110#define M原创 2015-08-19 23:15:29 · 823 阅读 · 0 评论 -
UVA - 10462 Is There A Second Way Left?(次小生成树)
题目大意:给出一张图,看能形成几个生成树解题思路:先判断能否形成生成树,在判断是否有次小生成树#include <cstdio>#include <cstring>#include <vector>using namespace std;#define N 110#define M 410#define INF 0x3f3f3f3fstruct Edge{ int from, to原创 2015-08-19 23:17:30 · 913 阅读 · 0 评论 -
UVA - 11183 Teen Girl Squad(最小树形图)
题目大意:给出一张有向图,0为根,求出最小树形图解题思路:模版题#include <cstdio>#include <cstring>#define N 1010#define M 40010struct Edge{ int u, v, c;}E[M];int n, m;void init (){ scanf("%d%d", &n, &m); for (int i =原创 2015-08-19 23:19:46 · 884 阅读 · 0 评论 -
HDU - 4009 Transfer water(最小树形图)
题目大意:有N个点,每个点都有相应的三维坐标(x,y,z) 现在要求每个点都能获得水,或者水的方式有两种 1.自己挖井,费用为X * 海拔高度z 2.铺设管道引水。 a.如果海拔高度小于引水处,费用为两地曼哈顿距离*Y b.如果海拔高度大于饮水处,费用为两地曼哈顿距离*Y + Z解题思路:设置一个虚根,虚根引向所有的点,权值为挖井的费用,接着按照要求连边,求出最小树形图即可原创 2015-08-19 23:24:42 · 815 阅读 · 0 评论 -
POJ - 3164 Command Network(朱刘算法)
题目大意:有N个点,M条有向边。现在要求你以1为根,构造出一棵最小生成树,问这棵最小生成树能否被构造出来,如果可以,总权值是多少解题思路:朱刘算法的裸题,我只想吐槽一下POJ,用的是double型的,输出时是%.2lf,结果是WA 换成了%.2f就A了。。这什么情况,白白花费了1个多小时去调错。。#include <cstdio>#include <cstring>#include <cmat原创 2015-08-17 00:10:21 · 1184 阅读 · 0 评论 -
UVA - 11865 Stream My Contest(朱刘算法)
题目大意:有n台机器(编号为0—n-1,其中机器0是服务器),m条网线(每条网线相当于一条有向边,有相应的带宽和代价),c的钱现在要求用m条网线搭建一个网路,使得每台机器都可以从服务器接收到信息,且带宽的最小值达到最大解题思路:朱刘算法的模版题了,不过加了一个条件,要二分,只要二分一下带宽,在判断一下能否网线能否被使用就可以了 如果连最小的带宽都弄不了,那就表明网路无法建成了,因为枚举值为最小带宽原创 2015-08-17 00:05:33 · 867 阅读 · 0 评论 -
HDU - 4081 Qin Shi Huang's National Road System(次小生成树)
题目大意:有N个城市,现在要修建一些道路使得这些城市能互相连通,修建一条道路的权值为这两个城市之间的欧几里德距离。 现在你可以选择一条路作为特殊道路,这条道路的权值为0 假设修建道路的总权值为B,用特殊道路的连接的两个城市人口之和为A,问A/B的最大值解题思路:先求出最小生成树,最小生成树的总权值肯定是最低的,在求最小生成树的期间,顺便把任意两点的之间的唯一路径的最大权值给求出来,并纪录接着枚举原创 2015-08-16 23:58:33 · 599 阅读 · 0 评论 -
URAL - 1416 Confidential(次小生成树)
题目大意:要求你求出最小生成树和次小生成树解题思路:比较裸的题#include <cstdio>#include <cstring>#include <algorithm>#include <vector>using namespace std;const int MAXNODE = 510;const int MAXEDGE = 1000010;const int INF = 0x3原创 2015-09-11 09:48:40 · 431 阅读 · 0 评论 -
CodeForces - 240E Road Repairs(最小树形图+输出路径)
题目大意:有N个城市,城市1是首都 有M条路,路的状态有两种,一种是可行的,另一种是不可行的,不可行的可以修成可行,但要花1单位的费用 现在问,要让首都能到任意城市,需要花费的最小代价是多少,需要修的路是哪几条解题思路:就是最小树形图+输出路径了#include <cstdio>#include <cstring>using namespace std;const int N = 2000原创 2015-09-11 22:06:50 · 781 阅读 · 0 评论 -
UVALive - 4848 Tour Belt(暴力+最小生成树)
题目大意:给出一个定义,如果一个块为连通块,且连通块里面的任意两点的长度大于外界的点到该块的点的长度,那这个块就称KTO 现在问KTO里面的点的数量有多少解题思路:kruscal算法,边从大到小排,暴力就可以过,别看那么多条边,其实数据并不是很大#include <cstdio>#include <cstring>#include <algorithm>using namespace std原创 2015-08-21 23:37:51 · 1012 阅读 · 0 评论 -
UVALive - 3887 Slim Span(枚举+二分)
题目大意:给出N个点,M条边,求出一棵包含N个点的树,且树的最大权值-最小权值 达到最小解题思路:枚举最小边,然后依此得到生成树,这样的生成树的权值差肯定是最小的#include <cstdio>#include <cstring>#include <algorithm>using namespace std;#define N 110#define M 10010#define INF原创 2015-08-21 23:53:38 · 704 阅读 · 0 评论 -
HDU - 4126 Genghis Khan the Conqueror(树形DP + 最小生成树)
题目大意:有N个点,M条路,现在给出K条路,这K条路是在M条路中将权值扩大的路。每给出一条,就要求求出最小生成树的权值 现在问每条路的最小生成树的权值和/K的最小值是多少解题思路:先得到最小生成树,然后判断路是不是最小生成树的树边,如果不是,就不影响了 如果是的话,就要判断一下是不是要去掉该边,再添加新的边。 如果去掉该边的话,就相当于把最小生成树划分成了两个块,所以现在需要的是一条最小边来连原创 2015-08-21 23:51:39 · 894 阅读 · 0 评论