![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
图论
文章平均质量分 79
Yoangh
奋斗的小程序猿
展开
-
无向图的割顶(poj1523,1144)
割顶:表示无向图中的点,这个点删除之后,原图不在联通,这样的点就是割顶。 怎么求一个图中的割顶呢? 把无向图变成一颗树,dfs时候搜索到在dfs树上的称为树边,搜索是出现后代指向祖先的边称为反向边。 对于根节点,当他存在两个或两个以上的子节点时,那么他就是割顶。 而对于其他节点u,当且仅当u存在一个子节点v,使得v及其所有的后代都没有反向边连回u的祖先时,u是一个割顶。 那么判断就很简单,原创 2015-05-16 11:48:03 · 1705 阅读 · 0 评论 -
poj 3177 & 3352 【无向图双连通分量Tarjan】
题目:poj 3177 & 3352题意:大概意思就是给你一个无向图,让你添加最少的边,让所有点都双连通。分析:双连通的定义就是任意两个点至少有两条路可达。其实做法跟添加最少边强连通一样,先对图中已经双连通的缩点,然后重新编号。这就是著名的Tanjan算法。通过搜索的思想对所有存在环的边遍相同的号如果要让所有的点双连通,那么对于缩点后的图中如果度数为 1 的原创 2014-11-04 21:38:48 · 1434 阅读 · 0 评论 -
poj 1679 The Unique MST 【次小生成树】【模板】
题目:poj 1679 The Unique MST题意:给你一颗树,让你求最小生成树和次小生成树值是否相等。分析:这个题目关键在于求解次小生成树。方法是,依次枚举不在最小生成树上的边,然后添加到最小生成树上,然后把原树上添加了之后形成环的最长的边删去,知道一个最小的。就是次小生成树。这些需要的都可以在求解最小生成树的时候处理出来。AC代码:#inc原创 2014-11-04 10:11:03 · 1446 阅读 · 0 评论 -
poj 2186 Popular Cows 【强连通】
题目:poj 2186 Popular Cows题意:n头牛,其中存在一些牛相互崇拜,具有传递性,问有多少头牛是被其他所有牛崇拜的。分析:建立一个有向图,然后强连通缩点,之后求出度为0的点,假如存在多个,那么ans = 0,因为缩点之后如果x崇拜y,x也崇拜z,那么肯定y和z不能互相崇拜,不满足。然后求出度为0的这个点缩点前环上有多少个点就ansAC代码:原创 2014-11-04 18:13:18 · 933 阅读 · 0 评论 -
poj 2553 The Bottom of a Graph 【强连通图中出度为0点】
题目:poj 2553 The Bottom of a Graph 题意:大概题意是给出一个有向图,求强连通缩点以后出度为0的点。分析:入门题目,先强连通缩点,然后表示出度为0的,枚举输出即可。#include #include #include #include #include using namespace std;const int N =原创 2014-11-04 17:35:28 · 1183 阅读 · 0 评论 -
poj 1236 Network of Schools 【强连通图】
题目:poj 1236 Network of Schools /*******以下kuang大神的解释,写的很好就不解释了*************************/强连通分量缩点求入度为0的个数和出度为0的分量个数题目大意:N(2各学校之间有单向的网络,每个学校得到一套软件后,可以通过单向网络向周边的学校传输,问题1:初始至少需要向多少个学校发放软件,使得网络内所原创 2014-11-04 16:43:54 · 1102 阅读 · 0 评论 -
hdoj 5093 Battle ships 【二分图最大匹配】
题目:hdoj 5093 Battle ships题意:给你一个n*m的图,图中有冰山 ‘# ’,浮冰 ‘o’ 以及普通海 ‘ * ’,现在要在海中布置尽可能多的炮弹,炮弹不能突波冰山,不能让炮弹互相攻击到,问最大能不知多少个?分析:二分图的经典题目,关键在于怎么建图,图进行两次编号,按行编号,每一行中能攻击到的一块编号成相同的数,每一列同样,然后对行和列有编号的地方进行连原创 2014-11-03 14:32:52 · 1173 阅读 · 0 评论 -
hdoj 4009 Transfer water 【无源点最小树形图】【好题】
题目:hdoj 4009 Transfer water题意:题目有点长,说是有个村子,有 n 户人家要用水,他们加的位置用三维坐标来表示(x,y,z),他们有两种选择:1:自己挖一口井,花费为 z * cost_x2:从别人家接个水管引过来,化为为距离 * cost_y,如果要引的地方比当前地方低的话,还要买一个水泵,花费cost_z。距离算法|x2‐x1|+|y2‐y1|原创 2014-10-31 19:40:00 · 1035 阅读 · 0 评论 -
hdoj 2121 Ice_cream’s world II 【无根节点最小树形图】
题目:hdoj 2121 Ice_cream’s world II 题意:题目是一道躶题,给n个点,m条边的有向图,然后找一个点,到所有点的距离和最小,找出这个点并输入距离。分析:很明显是求一个最小树形图,但是没有说根节点,要找跟节点,我们可以虚拟一个节 点 x ,x 到所有节点连边距离为前面所有距离和+1为 dis 。然后从x 节点求一次最小树形图为ans,则ans原创 2014-10-31 11:51:33 · 1426 阅读 · 0 评论 -
ZOJ Problem Set - 3820 Building Fire Stations 【树的直径 + 操作 】
题目:ZOJ Problem Set - 3820 Building Fire Stations 题意:给出n个点,n-1条边的一棵树,然后要在两个点上建立两个消防站,让所有点的到消防站最大距离的点的这个距离最小。分析:首先先求这个树的直径,然后在树的直径的中点处把树分成两棵树,然后在把两棵树分别取中点的最大值就是ans值。这个题目数据有点水了感觉。。。AC代码:原创 2014-10-13 15:21:47 · 2227 阅读 · 0 评论 -
poj 2942 Knights of the Round Table 【双连通缩点+判奇圈】【经典】
题目:poj 2942 Knights of the Round Table 题意:n个骑士经常一起开会,其中有一些两两相互憎恨,他们不能同一桌,开会要表决一些事情,所以必须奇数个人,最少3个,求永远也参加不了会议的人的个数、分析:这个题目两点首先,建图求双连通缩点建图的话,因为相互憎恨的不能再一块,所以要建补图,让能够在一起的所有的连接,这样的话,如果能存在环且环原创 2014-11-05 10:55:53 · 1192 阅读 · 0 评论 -
hdoj 2586 How far away ? 【Tarjan离线LCA】
题目:hdoj 2586 How far away ?题意:给出一个有权树,求任意两点的之间的距离。分析:思想就是以一个点 root 作为跟变成有根数,然后深搜处理处所有点到跟的距离。求要求的两个点的LCA(最近公共祖先),然后ans = dis【x】 + dis【y】 - 2 * dis【LCA(x,y)】,可以画图分析一下就知道。求LCA我用的是Tarj原创 2014-11-06 09:49:05 · 1922 阅读 · 2 评论 -
ZOJ Problem Set - 3195 Design the city 【Tarjan离线LCA】
题目:ZOJ Problem Set - 3195 Design the city题意:给出一个图,求三点的连起来的距离。分析:分别求出三点中任意两点的距离 / 2 = ansAC代码:#include #include #include #include using namespace std;#define N 50010#define M原创 2014-11-06 17:26:24 · 1262 阅读 · 0 评论 -
判欧拉回路或求一个图中欧拉图的个数
判欧拉图两个条件首先联通,其次度全部为欧度。那么就很easy了。 题目:hdoj1878求一个图中欧拉图的个数。 首先通过连通性求出各个子图,然后求子图中奇数度的个数cnt,cnt/2为欧拉图的个数。若子图没有奇数度,则为一个欧拉回路。 题目:hdoj3018Ant Trip 注意这个题目中可能出现孤立点,不算入欧拉图中。AC代码:include include include includ原创 2015-04-21 17:22:42 · 2553 阅读 · 0 评论 -
混合图欧拉回路(hdoj3472 HS BDC)
欧拉回路基础知识戳这里混合图:就是图里面有的边是有向边,有的边是无向边,组成的图叫做混合图。 要判混合图是否满足欧拉回路,首先必须满足欧拉图的条件 1:欧拉回路要求所有点的度数必须都为偶数,欧拉道路要求所有点的度数两个奇数。 2:给无向的边定向,首先任意定向,这些便之间网络流建边from到to容量为1,然后对于当前入度大于出度的点y,说明有d = (入度-出度)/2的边需要变成相反方向,我们这原创 2015-04-23 20:55:49 · 1219 阅读 · 0 评论 -
兹鼓欧拉回路(hdoj2894DeBruijin&poj1392)
题意:让你构造一个环形的串,由二进制0,1组成,然后每截取不同的k个,组成的数都不相同,现在给你一个数k,然后构造字典序最小的串,使得满足截取的x长度的值都不相同。分析:这题目不太好理解,理解了就简单了。可以暴力搜索。 其模型是一个欧拉回路,首先x长度的0,1串组成的最大数为n=2^x-1. 怎么构造一个欧拉回路模型呢,假设首先由n个顶点编号(0,1,2…..n),现在任意给一个顶点编号f,我舍原创 2015-04-22 14:43:59 · 1284 阅读 · 0 评论 -
poj 3723 Conscription 【最大生成树|最大权森林】
题目:poj 3723 Conscription题意:要征兵n个男兵和m个女兵,每个花费10000元,但是如果已经征募的男士兵中有和将要征募的女士兵关系好的,那么可以减少花费,给出关系,求最小花费。分析:这个题目初始一个是个二分图,以为可以从这里入手,但是这个题目这个性质没用。初始花费没人10000,那么减去其中有关系的就是当前的花费。要是花费最少,那么减去的最大即原创 2014-12-06 10:02:51 · 5103 阅读 · 1 评论 -
poj 3255 Roadblocks【次短路】
题目:poj 3255 Roadblocks题意:给出一个无向图,然后求1到n点的次短路分析:两种做法,第一种,Astat+最短路求k短路的方法。第二种是比较暴力的方法。先求1点到所有点的最短路dis1然后求n点到所有点的最短路dis2然后枚举所有边,则次短路为dis1【from】 + dis2【to】 + w【i】中大于最短路的最短的。AC代码原创 2014-12-06 08:56:14 · 1161 阅读 · 0 评论 -
hdoj 5137 How Many Maos Does the Guanxi Worth【最短路】
题目:hdoj 5137 How Many Maos Does the Guanxi Worth题意:给出一个无向图n个点m条边,断开其中的除了1和n之外的其中一个点的所有边,让最短路最长。分析:思路已经题意中给出了。枚举删去那些的所有变,然后求一个最大的最短路。就是写代码的事儿AC代码:#include#include#includeusing na原创 2014-12-04 10:50:59 · 1543 阅读 · 0 评论 -
poj 2449 Remmarguts' Date 【SPFA+Astar】【经典】
题目:poj 2449 Remmarguts' Date题意:给出一个图,求k短路。算法:SPFA求最短路 + AStar下面引用大牛的分析: 首先,为了说话方便,列出一些术语: 在启发式搜索中,对于每个状态 x,启发函数 f(x) 通常是这样的形式:f(x) = g(x) + h(x)原创 2014-11-07 11:24:08 · 1488 阅读 · 0 评论 -
hdoj 2874 Connections between cities 【Tarjan离线LCA】
题目:hdoj 2874 Connections between cities题意:战争过后,一些城市毁坏了。意思图不连通,让你求任意两点的距离、分析:很明显求LCA但是图不连通,所以我们Tarjan的时候要对每个点进行。然后标记即可。另外,这个题目卡vector,看来以后要学着用数组模拟邻接表了。AC代码:#include #include #原创 2014-11-06 16:57:12 · 1147 阅读 · 1 评论 -
poj 1470 Closest Common Ancestors 【Tarjan 离线 LCA】
题目:poj 1470 Closest Common Ancestors题意:给出一个树,一些询问。求LCA的个数、分析:很简单的模板题目,但是模板不够优秀,一直wa...RE,各种错误一下午,终于发现自己模板的漏洞了。AC代码:#include #include #include #include using namespace std;#def原创 2014-11-06 19:28:21 · 1560 阅读 · 0 评论 -
最小树形图 【poj 3164 Command Network】
定义:在有向图上的最小生成树。算法过程:和最小生成树一样,不过这个不是无向图的,但是也可以用类似的算法,最小树形图的第一个算法数朱刘算法,依据最小生成树数算法形成的。我们知道,在最小生成树算法中,我们每次选长度最短的边,如果满足条件则加入最小生成树中,知道所有的点都在树中,最小树形图同样。首先和最小生成树一样,首先必须保证图联通,否则不能形成最小树形图。但是由于是有向的,而原创 2014-10-31 11:40:28 · 1154 阅读 · 0 评论 -
hdoj 2066 一个人的旅行 【多源多汇最短路】
题目:hdoj 2066 一个人的旅行方法:缩点 + 最短路分析:看了大神的一篇博客,讲冗余压缩的,然后就想找一个多源最短路练练手。这个题目就是典型的多源多汇最短路方法:把所有的源点压缩成一个点,然后汇点压缩成一个点,然后跑最短路注意:1:求最短路的时候邻接表存储有重边不影响结果。2:此题有重边。3:要特殊处理源点和汇点是同一个点的情况。为0原创 2014-10-02 14:32:32 · 3564 阅读 · 0 评论 -
poj 2135 Farm Tour 【无向图最小费用最大流】
题目:poj 2135 Farm Tour 题意:给出一个无向图,问从 1 点到 n 点然后又回到一点总共的最短路。分析:这个题目不读仔细的话可能会当做最短路来做,最短路求出来的不一定是最优的,他是两条分别最短,但不一定是和最短。我们可以用费用流来很轻易的解决,建边容量为1,费用为边权,然后源点s连 1 ,费用0 ,容量 2 ,n点连接汇点,容量2,费用0,,就可以了。原创 2014-11-10 08:50:55 · 4533 阅读 · 5 评论 -
hdoj 3832 Earth Hour(最短路)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3832题意:给出n个半径和圆心坐标已知的点,编号为1 -- n ,求连接1 ,2 , 3所需要的最少圆。题目的难点在于转化,转化为枚举其他点到当前 3 个点的最小距离。即最短路径、分析:给出的是圆的坐标,首先我们知道,如果一个圆和其他所有圆都没有交集,那么这个圆肯定原创 2014-04-05 18:27:21 · 1387 阅读 · 0 评论 -
有向图的强连通分量之Tarjan算法
描述:To prove two sets A and B are equivalent, we can first prove A is a subset of B, and then prove B is a subset of A, so finally we got that these two sets are equivalent.You are to prove N set原创 2014-04-05 16:56:04 · 3846 阅读 · 0 评论 -
Floyed求传递闭包 poj 3660
Floyed算法本来是求最短路的一个比较低效率的算法。介绍 http://blog.csdn.net/y990041769/article/details/8524903传递闭包是什么东西呢。也不知道。题目:http://poj.org/problem?id=3660题目意思就是给出一个有向图,求能确定唯一优先级关系的点。可以先用Floyed算法将有间接优先级关系转化为直接优先原创 2014-02-21 17:36:01 · 1451 阅读 · 0 评论 -
最小生成树算法(prim 克鲁斯卡尔(并差集))
Picnic PlanningTime Limit: 5000MS Memory Limit: 10000KTotal Submissions: 8021 Accepted: 2822DescriptionThe Contortion Brothers are a famous set of circus clowns,原创 2013-01-23 10:16:36 · 1896 阅读 · 0 评论 -
hdoj 1181 变形课 (floyd)
变形课Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others)Total Submission(s): 7621 Accepted Submission(s): 2842Problem Description呃......变形课上Harry碰到了一点原创 2013-01-22 17:47:30 · 1083 阅读 · 0 评论 -
最短路径问题的几种算法(dijkstra , Floyd ,) 例 hdoj 1002 畅通工程续
集训学最短路径问题目前学了两种算法,dijkstra 和 Floyd 。先说FloydFloyd 其写法很简单,就是3层for循环,由于循环较多,因此也时间复杂度高,其核心思想就是map[i][j] = map[i][t] + map[t][j] ;在图里面找 i 点和 j 点的最短路径,如果存在一个中间点 t ,使得 i—>t 的距离加上 t -> j 的距离的和小于直接从 i -> j原创 2013-01-21 15:04:45 · 3017 阅读 · 0 评论 -
并查集
恩,前两周学习了并查集,是时候总结一下了。等价关系与等价类从数学上看,等价类是一个对象(或成员)的集合,在此集合中的所有对象应满足等价关系。若用符号"≡"表示集合上的等价关系,那么对于该集合中的任意对象x,y, z,下列性质成立:1、自反性:x ≡ x2、对称性:若 x ≡ y 则 y ≡ x3、传递性:若 x ≡ y 且 y ≡ z 则 x ≡ z原创 2013-09-26 12:33:30 · 2279 阅读 · 0 评论 -
拓扑排序
拓扑排序:拓扑排序是根据离散数学中有关偏序与全序定义的。 若一个集合 X 上的关系 R 是自反的 反对称的和传递的,就称为 R 是集合 X 上的偏序关系。设 R 是集合 X 上的偏序,若对每个 x ,y 属于 x ,必有 xRy 或 yRx,则称 R 是集合 X 上的全序关系。 直观的讲,偏序就是一个点的集合中只有部分顶点可以确立优先关系。而原创 2013-07-19 11:53:51 · 3121 阅读 · 0 评论 -
欧拉回路与欧拉道路
欧拉回路 图G的一个回路,若它恰通过G中每条边一次,则称该回路为欧拉(Euler)回路。具有欧拉回路的图称为欧拉图(简称E图)。有向图的欧拉回路一个有向图存在欧拉回路的前提条件是这个图是个连通图,其次要求其每个点的入度等于出度,或者其中有一个点的出度比入度大1,另一个点的入度比出度大一这样就存在一条欧拉回路。如果其每个点的入度等于出度则从任意一原创 2013-07-18 18:49:10 · 8142 阅读 · 1 评论 -
邻接表实现 单源最短路径SPFA算法 poj1511
首先讲邻接表的实现,以前一直遇到题目都是用vector模拟,今天遇到一个题目vector超时,于是学习了用数组模拟实现邻接表,新学的数据结构,搞的不是很透彻,记录一下。其实就是头插发,首先用一个结构体E记录节点的信息,指向那个节点,以及指向节点的权值等信息,给E结构体设置一个next,让它指向H数组,H数组初始化为-1,初始化为-1是为了方便判断某个点直接相连点是否找完了,自己还不是很透彻了,原创 2014-01-16 20:47:10 · 7129 阅读 · 4 评论 -
nyoj1006(最短路次短路spfa)
偷西瓜时间限制:1000 ms | 内存限制:65535 KB难度:4描述对于农村的孩子来说最大的乐趣,莫过于和小伙伴们一块下地偷西瓜了,虽然孩子们条件不是很好,但是往往他们很聪明,他们总在计算着到达瓜田的距离,以及逃跑的路线,他们总是以最短的距离冲到瓜田里面,然后以最短的距离回到出发的地方,不过瓜田的大人们已经在他们来的路上等待他们。于是聪明的小伙伴们原创 2014-05-10 15:51:05 · 2479 阅读 · 0 评论 -
二分图最大匹配匈牙利算法(poj)3041(模板)
概念:最大匹配:原创 2014-05-10 10:08:17 · 1068 阅读 · 0 评论 -
nyoj 1078 汉诺塔(四)[二分图 || 规律 || 暴力 || 贪心]
题目:nyoj 1078 汉诺塔(四)分析:做这个题目的时候是在图论的题目里面看到的,到时读了题目推了一下,发现好像有点规律,试了一下果然过了。后来看了一下数据,才50,那么试了一下模拟,也过了。好像zoj有一道题目卡模拟,模拟的时候必须贪心一下才能过这道题出题人的意图在于考大家的:二分图最小路径覆盖。把每一个球看做一个点,然后如果两个和为平方数的话就给原创 2014-09-28 20:57:18 · 1803 阅读 · 0 评论 -
二分图判定 nyoj1015(模板)
题目:点击打开链接nyoj1015分析;题意很清楚,就是让判断一个图是不是二分图,思路当然就是染色法,首先给一个顶点然色,然后与它相邻的顶点全部染相反的颜色,如果过程中发现要染的点已经染色了,而且是和现在点相同的颜色的话,那么就说明不是一个二分图。其实就是广搜模板 #include #include #include #include #include #i原创 2014-07-18 14:46:14 · 2659 阅读 · 0 评论 -
uva10067 Playing with Wheels 【建图+最短路】
题目:uva10067 Playing with Wheels 题意:给出一个机器,有四个循环的轮子,见图,然后给出一个初始数和目标数,然后期间不能出现的数字,没一分钟可以拨动一个数,问你最短需要的时间。分析:这个题目可以转化为求图的最短路。因为有对于一个当前状态,有8种可以转化为的状态,那么我们可以把每一种状态转化为一个点,然后状态之间连长度 1 的边,然后求原创 2014-09-03 18:40:44 · 1369 阅读 · 0 评论