
图论及其应用
AC_jie
这个作者很懒,什么都没留下…
展开
-
poj3660 Fylod求闭包传递
今天讲了最短路径的算法,我了个去,一天讲三个算法就让做题,贼鸡儿难啊,算法讲的还不大明白,看来宝宝太弱了,唉,让我静静的哭一会吧。废话不多说讲题 题目大意就是给出一些牛的胜负关系,然后,让你确定有几只牛的排名可以确定。一开始以为用拓扑,但是师哥说用floyd做,可难死宝宝了,看了网上的代码,才明白floyd用来确定每两个点之间的关系。 大体思路:确定每个点的出度和入度,如果这个点的出度和入度之和为原创 2017-07-24 20:51:22 · 339 阅读 · 0 评论 -
欧拉回路的判定 poj 1300
这个题卡了一上午卡到心态爆炸,卡到欲仙欲死。各种bug蜜汁出现。一边一遍的调试,忽然发现思考成熟是多么的重要!最后是一个短路效应的问题,怀疑人生!这个题就是统计出度和入度,就是建图有点麻烦,其实也不算太麻烦了。对于无向图而言就是 判断是否满足没有奇度顶点,或者奇度定点只有两个,并且这两个奇度顶点其中一个是0,另一个是起点。#include#include#include#inc原创 2018-02-04 15:18:41 · 261 阅读 · 0 评论 -
poj 1556 The Doors
这个题复杂在建图比较难,就是要考虑墙阻碍路径怎么判断?还有就是墙上数据的储存。都是很经典的方法。 对于两点之间是否有路径的判断,就是判断两点之间是否有墙,对墙进行判断,因为两点之间可能有很多墙,所以要记录墙的位置,对于是否阻挡的判断就是判断中间那个墙的两个点位于所求两点的上下位置,同上同下为不阻挡,反之,则阻挡。#include#include#include#include#i原创 2018-01-28 20:47:06 · 176 阅读 · 0 评论 -
有向图的欧拉回路判定问题 poj1386
这个题也卡卡卡,发现自己好粗心,唉.。有向图的判定:统计每个点的出度和入度,前提是有向图是连通图。 1. 如果每个点的出度 = 入度 则存在欧拉回路。 2. 如果有且仅有两点出度、入度不想等,且这两个点的出度 - 入度差为1 或 -1.差为1的那个点是欧拉图的起点,为 -1 的是重点。这个题先来判断图的连通性,用并查集的方法,值得注意的一点是并查集是以点为元素的,所以原创 2018-02-05 09:53:57 · 965 阅读 · 0 评论 -
dijkstra算法
今天看了dijkstra算法,先来说一下核心的东西,首先他是用于边权全是正值的图中,类似于prim利用贪心思想来寻找最短路,利用的原理是;一条最短路的子路也是最短路的思想。每次将找到的新点进行松弛。#include#include#include#includeusing namespace std;const int MAXN = 500 + 10;const int MAX原创 2018-01-29 16:55:42 · 270 阅读 · 0 评论 -
poj1135 Domino Effect
这个区域赛的题好难理解,题意是找最后多米诺骨牌什么时候倒下,以及倒下的位置。 思路是这样的因为救有两种倒下的情况,一是在关键牌处,一是在普通牌处,如果是在关键牌处那样的话就是一个到每个关键牌的最短路径中最大值问题,如果是普通牌处,那样肯定是在两个关键牌之间,来考虑这种情况下,时间改怎么样计算,假设最后倒在普通牌的位置 V ,那样的话肯定有一条边,这样的话,以V做顶点,将最后的这条边分为两份,分别原创 2018-01-29 18:21:40 · 377 阅读 · 0 评论 -
poj 3268 Silver Cow Party
求所有奶牛往返的最短时间中最长的,将问题转化为两部分,一是求去时,这部分是将目标点作为起点,将每个点的出边作为数据建立邻接表,二是求回来时,这部分是将目标点作为起点,将每个点的入边作为数据建立邻接表。将上述求得的数据求和找最大。注意图有可能不是连通图。#include#include#include#include#includeusing namespace std;const原创 2018-01-30 16:33:24 · 201 阅读 · 0 评论 -
图论500题
=============================以下是最小生成树+并查集======================================【HDU】1213 How Many Tables 基础并查集★1272 小希的迷宫 基础并查集★1325&&poj1308 Is It A Tree...转载 2018-02-27 15:22:41 · 274 阅读 · 0 评论 -
proxy 逆向建图 dijkstra算法 山东省第七届省赛
这个题的思路就是先逆向建图这点不容易想到,逆向建图的原因是便于枚举与0临接的边,如果正向建图的话是没有办法实现的, 一直在WA,后来看了题解也知道自己对题目的挖掘还不够,而且对dijkstra的理解也还不够. 这个题的思路就是先逆向建图求出最短路之后,枚举与0临接的边. 坑点在于这个图不一定是联通图. ACcode#include<cstdio>#include&...原创 2018-03-15 16:44:25 · 268 阅读 · 0 评论 -
poj 3255 松弛思想求次短路
#include <cstdio>#include <cstring>#include <queue>#include <algorithm>#define MAXN (5000 + 10)#define INF (5000*5000*2)using namespace std;struct edge{ // 临界表 int ...原创 2018-03-04 09:24:47 · 248 阅读 · 0 评论 -
求割点 和 点联通分量
今天又开始搞图论,今天的这个算法是用来求割点的算法。以及将这个点去掉后可以形成的强联通分量数。 先来解释一下原理: 先来思考一下最朴素的算法,就是将每个点进行标记,意为将其去掉,然后进行深搜遍历,统计联通分量的个数。 这个时间复杂度为 n (这个是n个被去掉的点)* n (判断n个点)* n(搜索)???这个宝宝也不是很清楚的拉 略略略~先来说一下Tarjan(塔尔杨) 算法的原理,...原创 2018-03-25 16:39:32 · 331 阅读 · 0 评论 -
Arbitrage poj 2240 bellman-ford判圈应用
题解: 题目分析 题意是判断是否可以进行套利,就是判断图内是否存在一个圈,当经过这个圈回到终点时自己的钱是否可以增多。dis数组存的是同种货币进行汇兑的最大值。当“松弛”进行n次时,肯定存在圈的情况,这样的话,如果dis[v0] > 1的话,说明可以进行汇兑。#include#include#include#include#includeusing namespace原创 2018-01-27 20:12:02 · 258 阅读 · 0 评论 -
最短路之bellman-ford算法
先来说下bellman-ford算法的基本思想。假设在一个有向图中有n个点,那么从源点到任意其他一点的最短路径数量肯定不超过n - 1(假设不含回路)。那样放松一下限制的话,对于任意一条路径来说,将n - 1条边都尝试着“松弛”一下,那样的话,肯定就可以将这条路径变为最短路。 对于bellman-ford算法来说的话,它是采用类似于floyd算法的方式,每次外循环代表对每个点最多加入可以松弛边原创 2018-01-27 17:46:14 · 276 阅读 · 0 评论 -
剪枝 之 奇偶剪枝 zoj 2110
今天学了下剪枝,简单来说一下剪枝是什么,在深搜过程中,如果标记其点,会生成一颗搜索树,但是有一些“枝”是无效的,所以可将其“剪去”。奇偶剪枝转载自 http://blog.youkuaiyun.com/chyshnu/article/details/6171758/ 什么是奇偶剪枝? 把矩阵看成如下形式: 0 1 0 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1转载 2018-02-03 11:09:09 · 309 阅读 · 0 评论 -
The Unique MST -----判定最小生成树的唯一性(kruslal算法)
先来说明一下最小生成树不唯一的原因,大的方面来说就是存在权值相同的边,并且这些权值相同的边在构建MIT时都有可能被用到,这是解决这个问题的核心。其实这种情况开可以继续细分, 情况一:权值相同的顶点有公共顶点. 情况二;权值相同的点没有公共顶点 情况三:情况一 + 情况二先来说一下kruslal算法的思想,先构建图,统计图中是否存在权值相同的边,如果没有这种情况直接可判断出 MIT唯一。原创 2018-01-12 13:15:11 · 1078 阅读 · 1 评论 -
poj 2570 Fiber Network floyd 传递闭包与二进制压缩
题意就是每个段光缆被一些公司掌握,询问所给定的一段上的光缆所有可以掌握它的公司,如果有字典序输出,没有的话输出‘-’。 思路: 看完题意不难想到就是个传递闭包将所有点对路径上的公共字符找出来,如果是处理字符串有点麻烦,就引出了一种新的方法和思想,二进制压缩。就是将有限字符集映射到一段二进制数上,这个忽然想起了真值函数的思想,二者本质相同,都是将难以处理的集合元素根据性质映射到01序列上。原创 2018-01-31 10:07:49 · 308 阅读 · 0 评论 -
最小瓶颈路
开始研究最小瓶颈路。 最小瓶颈路 :给定一个加权无向图,并给定无向图中两个结点u和v,求u到v的一条路径,使得路径上边的最大权值最小。这个问题可以稍微加强一下,即求很多对结点之间的最小瓶颈路。 PS: 最小瓶颈路其实是边!!! 最小瓶颈路: 给定一个加权无向图,并给定无向图中两个结点u和v,求u到v的一条路径,使得路径上边的 最大权值 最小。这个问题可以稍微加强一下,即求很多对结点之间转载 2018-01-25 19:54:36 · 1319 阅读 · 0 评论 -
次小生成树
#include #include #include using namespace std;const int maxn = 111;const int inf = 0x3f3f3f3f;int Map[maxn][maxn];//邻接矩阵存图int Max[maxn][maxn];//表示最小生成树中i到j的最大边权bool used[maxn][maxn];//判断该边是否转载 2018-01-25 21:58:33 · 269 阅读 · 0 评论 -
zoj 2770 Burn the Linked Camp(火烧连营) 差分约束
今天学了一个东西叫差分约束,简单来说就是用最短路知识的三角不等式来解多元不等式组。假设 Xv - Xu 但是难点在于如何根据已知条件构造不等式组,这是难点,也是解决问题的关键。#include#include#include#includeusing namespace std;const int MAXN = 1000 + 10; // 点数const int MAX =原创 2018-02-02 16:03:17 · 439 阅读 · 0 评论 -
hdu 1242 Rescue
bfs的拓展应用就是搜索无论是形式,关键在于状态的转移,和动态规划一样,如何划分状态是解决问题的关键。 这个题是寻求最少的时间,由于有坑点r可能有多个,就要反向搜索,将a点作为起点进行搜索,再将r点的坐标记录,利用动态规划的思想将每个点的可达最小值记录,然后求个最小值就可以了。#include#include#includeusing namespace std;const i原创 2018-02-02 16:40:48 · 263 阅读 · 0 评论 -
深搜水题 Red and Black
Description There is a rectangular room, covered with square tiles. Each tile is colored either red or black. A man is standing on a black tile. From a tile, he can move to one of four adjacent til原创 2017-04-27 19:28:20 · 590 阅读 · 0 评论 -
Poj3278 BFS Catch That Cow
Catch That CowDescriptionFarmer John has been informed of the location of a fugitive cow and wants to catch her immediately. He starts at a point N (0 ≤ N ≤ 100,000) on a number line and the cow i原创 2017-05-02 20:41:24 · 387 阅读 · 0 评论 -
hud 4081 次小生成树应用
这个题确实不简单,难就难在对题意的正确的理解上, 题意; 秦始皇想要修路使得n个城市连通,同时使得这些路尽量短。这时徐福说他可以在2个城市之间不花费人力物力建一条路,但他只能建1条这样的路。秦始皇想要使除了徐福造的那条路以外的路的总长度尽量短,而徐福想要造福更多的百姓,他想要使自己用法术建的那条路的两端的城市的总人口数最多。最终二人达成协议。假设A=用法术建的那条路的两端的城市的总人口数原创 2018-01-26 17:48:59 · 240 阅读 · 0 评论 -
最小生成树prim算法
#include #include #include using namespace std; const int MAX = 0x3f3f3f3f; const int MAXN = 100 + 10; int _map[MAXN][MAXN]; int dis[MAXN]; bool tag[MAXN]; int n;原创 2018-01-10 17:24:20 · 243 阅读 · 0 评论 -
Thrall’s Dream 搜索算法 山东省第四届省赛
题意就是判断任意两点是否联通,因为是有向图,就要求任意两点之间至少有一条单向路,一开始没什么思路,在没有思路的时候暴力搜索就是最好的思路. 因为暴力出奇迹. 但还是先算一下时间复杂度. 搜索的话,就是对每一个点进行广搜,记录每一个点可以到达的点,这样的话 时间复杂度就为 N * M = 2e7 . 所以这是可以暴力的.不过广搜的时候,发现的一个问题,因为一个点可以出现出队后在入队的情况...原创 2018-03-26 17:36:02 · 307 阅读 · 0 评论