
dfs && bfs
文章平均质量分 52
f_zyj
一个追逐蝴蝶的人!
展开
-
牛客网-2018 美团 CodeM 编程大赛-初赛 A 轮-3-城市漫游
ACM模版描述 题解这个题出的十分好,让我回忆起了遗忘已久的一些东西。首先,题意是给定一个树,nnn 个结点,n−1n−1n - 1 条边,每条边有时间花费 ziziz_i,给定若干组起点 SSS 和 TTT,要求从 SSS 到 TTT 时,必须每条边都经过至少 lilil_i 次,问最少花费。这里,我们首先很容易想到的是应该和 SSS 到 TTT 的最短路径(这里的...原创 2018-06-10 00:54:39 · 753 阅读 · 0 评论 -
51Nod-1560-扔人游戏
ACM模版描述 题解这个题我其实早就做过了,今天忽然发现 51Nod 上竟然也出了这道题,果然来源是 CF,所以就直接拿去年的代码提交了上去,那时候学 dfs 还是新手,初学,搞这道题真是煞费苦心,所以我的代码中注释详尽的狠,可能有的地方理解有些幼稚,但是也许有那么点可取之处,大家可以仔细看看代码,就是一个 dfs+位运算优化dfs + 位运算优化。这里的代码由于是我去年开春时写的,所以代码风格和原创 2017-07-03 15:13:47 · 403 阅读 · 1 评论 -
51Nod-1967-路径定向
ACM模版描述题解官方题解讲得十分详细,可以好好看看。险过,差点 TLETLE,加上输入输出外挂会好很多~~~代码#include <iostream>#include <cstring>#include <cstdio>#include <vector>#define fi first#define se secondusing namespace std;typedef pair<int原创 2017-07-02 22:57:19 · 860 阅读 · 0 评论 -
HDU-5886-Tower Defence
ACM模版描述题解NN 个点的一棵边权树,切掉某条边的价值等于切后分成的两棵树的直径较大值。求切除任意一条边的价值总和。这个题是树归问题,通过两遍 dfsdfs 就能解决,和 51Nod51Nod 上的有一个求树的直径的问题很像,具体哪道我就记不清楚了,反正都是两遍 dfsdfs 解决的。这里第一遍 dfsdfs 求出每个 down[i][0]、down[i][1]、dis1[i]down[i][0原创 2017-07-02 17:07:16 · 374 阅读 · 0 评论 -
51Nod-1403-有趣的堆栈
ACM模版描述题解按照我的思路,这里我们首先通过第二个方法恢复到原序列,接着呢,就是按照一方法遍历一遍即可。这里我们很容易想到,我们需要用到递归来恢复序列,那么怎么递归呢?仔细观察可以发现,方法二表示这个 pop 元素被压上了几个,那么我们可以将序列划分为两部分进行递归,一个是在该元素下的,一个是在该元素上的,所以呢,当我们处理过前者后,需要对该元素进行一次 push 操作,当我们处理过后者后,需要原创 2017-06-21 18:11:31 · 505 阅读 · 0 评论 -
关于蓝桥杯15届校赛第五题-八皇后问题
昨天比较忙,所以博客只能推迟到今天凌晨写了,无奈,主要是想总结一下自己做这道题后的一些见解和一些疑惑。八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发原创 2015-11-20 01:56:53 · 2898 阅读 · 8 评论 -
蓝桥-ALGO-18-单词接龙
ACM模版描述题解暴力搜索 dfs!代码#include <iostream>#include <string>using namespace std;const int MAXN = 22;int n, len = 0;string s[MAXN];int vis[MAXN];int charge(int left, int right){ int len = 0; int原创 2017-06-03 00:51:47 · 346 阅读 · 0 评论 -
蓝桥-ALGO-12-幂方分解
ACM模版描述题解典型的递归问题,只要细心,总会搞出事情来的。这里需要注意的是,加号的输出要额外多判断一下此时拆分的数是否已拆完,如果已经拆完就不要多输出加号了,不然会出现最后结尾多出一个加号,中间会出现若干个 “+)” 的情况(づ ̄3 ̄)づ╭❤~当然,如果想要最后一起判断也不是不行,先将串存储起来,最后统一去加号即可。一开始我就是这样写的,后来感觉麻烦了,所以改写成了第一种。代码#include原创 2017-06-02 03:12:53 · 407 阅读 · 1 评论 -
51Nod-1378-夹克老爷的愤怒
ACM模版描述题解这个题和这一段时间的那个拉钩测评选择的最后一道题极其相似,那个题好像叫做监狱逃离,是一个七级算法,但是和这个题几乎是一样的,同样都是树,也都是树归,找一个结点作为根后开始深入,一直深入到最深层也就是说叶子结点后,开始回朔的过程中,不断进行状态的迁移,这里需要注意的是,两个题都是要考虑到同级子树的相互影响关系,这里的同级子树指得是根的父亲是同一个结点的多棵子树……这里我写的代码思路和原创 2017-06-17 13:35:16 · 462 阅读 · 0 评论 -
蓝桥-BASIC-27-2n皇后问题
ACM模版描述题解一道水题,本来不打算写,但是发现是经典的8皇后问题的延伸,感觉挺不错的,所以写写玩……想当初最开始学习 dfs 就是通过八皇后问题来学习的。依然是逐行判断,不过需要同时放两个皇后才能继续深入搜索……代码#include <iostream>#include <queue>#include <cstring>#include <cstdio>using namespace st原创 2017-05-31 00:58:26 · 599 阅读 · 7 评论 -
CF-Tinkoff Challenge-Elimination Round-D-Presents in Bankopolis
ACM模版描述题解没怎么做过树归问题,所以当做到这道题时不免有些懵逼。典型的树归问题,从一个始发点不断查找下一个可行解,最后输出最小的可行解总和即可。这么说是不是太随意了一些啊,毕竟我没有做出这道题。这个题并不算难,能想到动归就好办了。首先我们设置一个 dp[st][ed][k] 表示从 st 点出发能到达的某个方向最远处 ed 点且剩余 k 个点未走,既然说到某一个方向,那么这里肯定是正向和反向,原创 2017-04-28 01:46:04 · 491 阅读 · 0 评论 -
EOJ-大学生程序设计邀请赛(华东师范大学)-C-袋鼠妈妈找孩子
ACM模版描述题解dfs 可解,先初始化全部为墙,也就是 *,然后我们开始打洞,一直打到起点,判断路径长度是否满足,不满足回溯砌墙就好了,最后一定会生成一个符合条件的洞直达起点。好题,算是一个比较有趣的问题。代码#include <iostream>#include <cstdio>using namespace std;const int MAXN = 10;const int DIR[4][原创 2017-05-15 00:03:54 · 797 阅读 · 0 评论 -
NYOJ-1237-最大岛屿
ACM模版描述题解除了读取时有些技巧外,其他的没什么值得一提的。代码#include <iostream>#include <cstdio>#include <cstring>using namespace std;const int MAXN = 505;const int DIR[8][2] = {{0, 1}, {0, -1}, {1, 0}原创 2017-05-03 23:09:46 · 549 阅读 · 0 评论 -
51Nod-1273-旅行计划
ACM模版描述题解通过题意,我们可以清晰的知道,每天到达的结点一定是叶子结点,所以我们先 dfs 遍历一遍树,将说有的叶子结点x入vn2,这里我们附带还要入一个叶子节点的深度d,为了保证未经过的城市最多,当然,光这样还是无法保证未经过的城市最多,因为不同的叶子结点到根节点的路径会有重合,所以我们需要从所有叶子结点开始向前访问一遍(访问之前需要进行一次排序,保证未经过的城市最多,同样多时,保证编号最小原创 2017-04-17 16:10:29 · 1062 阅读 · 5 评论 -
51Nod-1330-雕像投影
ACM模版描述 题解这个题是 51Nod 五级题中少有的思路明确的题,在我看来,这一定是 AC 人数和题目难度最不成正比的一道题……总的来说,这个题不过是三视图和雕塑的正逆转换。凡是可能有雕塑的地方我们每次++,如果这个地方可以有,那么经过三视图一折腾,A[x][y][z] 一定为 3,这里问是否有可能,那么此时所有标记为 3 的组合在一起可能并不符合连通,但是我们可以通过选取其中连通的进行判定是原创 2017-05-03 02:22:45 · 535 阅读 · 0 评论 -
NYOJ-1276-机器设备
ACM模版描述题解这是去年河南 ACM 省赛的一道题,一眼就能看出来是搜索,这个搜索比较适合用 bfs(),遍历一遍树即可。首先我们先用 O(n2)O(n^2) 复杂度建图,实际上就是一棵树,建好树后从根节点开始层序遍历,复杂度是 O(n)O(n),总得来说,这个题的复杂度是 O(T(n2+n))O(T(n^2 + n)),也就是 O(Tn2)O(Tn^2),只要熟练 bfs(),这个代码没啥需要特原创 2017-05-03 00:32:56 · 302 阅读 · 0 评论 -
[kuangbin带你飞]专题二-搜索进阶-D-Escape
ACM模版描述 题解这种问题不难,无非两点,一:看懂题,二:细心。矩阵的搜索一般使用 bfs 比较多,也比较好,这里的标记要用一个三维数组,多出来的一维用来标记时间,记住要用 bool 型,习惯性的使用 int 型会爆内存的,其他也没啥可多说的了。代码#include <iostream>#include <cstdio>#include <cstring>#include <algorit原创 2017-04-15 18:59:54 · 533 阅读 · 0 评论 -
[kuangbin带你飞]专题二-搜索进阶-B-Eight II
ACM模版描述 题解这道题和 Eight 相似,不过终止状态不唯一了,但是我们可以总结为9种状态,每种状态的核心差别是 X 的位置,所以我们需要打九个表,那么问题来了,怎么才能通过给定的终止(或初始)状态在这九个表中找到对应的关系呢?这里就考到了我们一个替换的思维,让我们想想,如果这些模块不是数字,而是颜色,那么我们会对其进行编号,所以,只要保证初始和终止状态模块对应关系不错,我们就可以随意对其进原创 2017-04-06 01:45:32 · 762 阅读 · 0 评论 -
算法训练 Lift and Throw (DFS && 位运算)
问题描述 给定一条标有整点(1, 2, 3, …)的射线. 定义两个点之间的距离为其下标之差的绝对值. Laharl, Etna, Flonne一开始在这条射线上不同的三个点, 他们希望其中某个人能够到达下标最大的点. 每个角色只能进行下面的3种操作, 且每种操作不能每人不能进行超过一次. 1.移动一定的距离 2.把另一个角色高举过头 3.将举在头上的角色扔出一段原创 2016-03-12 19:18:32 · 5278 阅读 · 16 评论 -
51Nod-1444-破坏道路
ACM模版描述题解因为道路权值均为1,所以可以省略收缩的过程用 bfs() O(n2)O(n^2) 的复杂度求得任意两点之间的最短路,然后呢,我们需要考虑两条路之间的重叠部分,暴力枚举所有可能重叠的部分,求最小 ans 即可。代码#include <iostream>#include <vector>#include <cstring>#include <queue>using namesp原创 2017-06-25 17:45:55 · 606 阅读 · 0 评论 -
牛客网-2018 美团 CodeM 编程大赛-资格赛-5-你的城市
ACM模版描述 题解这个题十分有意思,题目要求要选择的路线必须在保证无论哪班车错过后都有补救措施的前提条件下代价最低。这样,也就意味着,我们找到的路代价最低,且要求该路线方案每个节点(可以除去终点)都必须有两条及其以上的方案可以通往终点。所以首先我们需要预处理出来每个节点能否到达终点,这里也就存在一个问题,这里有时间限制,为了规避这个限制,我们需要进行拆点,因...原创 2018-06-08 14:54:55 · 603 阅读 · 4 评论 -
CF-Codeforces Round #485 (Div. 2)-D-Fair
ACM模版描述题解给定 nnn 个城市以及 mmm 条路,每个城市都生产一种商品,商品的种类 kkk 不超过 100100100 种,现在问,每个城市想要在买到 sss 种商品的最小代价,每个城市输出一个代价值。这里首先我们知道城市的最大值远远大于商品类型的最大值,所以一定存在很多城市生产相同的商品,所以一开始考虑的是缩点,后来发现其实 kkk 个 bfsbfsbfs 就行...原创 2018-05-30 17:51:47 · 536 阅读 · 0 评论 -
51Nod-1439-互质对
ACM模版描述 题解思路十分清楚,我们只需要在每次操作后加上或者减去该元素与集合中元素互质的个数。难点是,我们不可能暴力求出该数和集合中所有元素的互质个数,这里需要用到容斥的思路,我们可以考虑将每个数进行合数拆分,之所以这样是因为假如 a、ba、b 互质,那么 aa 约去一个质因子,a/p、ba / p、b 一定不再互质。那么我们就需要对每个数的质因子进行组合,但是存在一个问题便是增加或者减去的部原创 2017-09-03 10:56:50 · 659 阅读 · 0 评论 -
计蒜客-2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛-F-Islands
ACM模版题解我不喜欢计蒜客,我都等了两天了,还没有地方可以提交……现在连题目都看不了,算了,题解就不写了,光发一下代码吧……代码#include <iostream>#include <stack>#include <cstring>#include <vector>using namespace std;const int MAXN = 1e4 + 7;int n, m;int low[原创 2017-09-11 14:16:39 · 292 阅读 · 0 评论 -
51Nod-1526-分配笔名
ACM模版描述题解这个问题我们需要先建立 tiretire 树,然后开始爬数据,名字的话加加,笔名减减,如果笔名减减时,对应的值是正值,则说明刚好完全匹配,那么就直接加上长度即可,剩下的就是不能完全匹配的,所以我们可以通过 dfsdfs 来寻找匹配度最高的进行匹配,但是这里有一个问题就是爆栈,因为数据中会有一组深度很大的数据,我这里是通过作弊手段,看数据特判过的,正规的解法应该是通过将深搜转换为广搜原创 2017-09-15 18:04:01 · 423 阅读 · 0 评论 -
51Nod-1033-骨牌覆盖 V2
ACM模版描述题解第一次接触插头 dpdp,感觉好厉害的说,详细的看了看 cdqcdq 大佬的那个关于插头 dpdp 的 PPTPPT——《基于连通性状态压缩的动态规划问题》算是对插头 dpdp 有了一丢丢的理解,然后再反过来看这个题依然是不会……找了半天找到一个不错的题解,讲得虽然不算十分详细,但是如果看了上述的 PPTPPT 后再看这个题解,应该是不难理解的,lastone’s blog 详细的原创 2017-08-30 00:02:01 · 867 阅读 · 3 评论 -
HDU-2017 多校训练赛10-1001-Admiral
ACM模版描述 题解这个题和八数码的问题十分像,如果没有记错的话,八数码那个题用到的也是 搜索+HASH搜索 + HASH,不过它的 HASHHASH 利用的是康拓展开式,这里我们采用的 HASHHASH 略微不同,就是一个普通的 HASHHASH,稍微想想应该是可以想开的。代码#include <cstdio>#include <cstring>#include <iostream>#in原创 2017-08-29 13:27:03 · 502 阅读 · 0 评论 -
HDU-2017 多校训练赛10-1008-Monkeys
ACM模版描述题解这个题主要是卡 I/OI/O,需要一个输入外挂,让人头痛的是普通的输入外挂还不行,需要一个十分强大的外挂……当然,这个外挂我一会儿要添加到我的模版中,真的不错。代码#include <cstdio>#include <cstring>#include <algorithm>#include <vector>#include <queue>using namespace st原创 2017-08-28 23:52:28 · 430 阅读 · 0 评论 -
51Nod-1832-先序遍历与后序遍历
ACM模版描述题解官方题解的思路十分的清晰,所以先看看官方题解:也就是说决定树的种类的是只拥有一个儿子的结点个数 ctct,最后结果为 2ct2^{ct}。由于这里的总结点数十分大,所以这里的结果将会是一个大数,那么我们顺其自然的引入大数,当然,如果你害怕不够快,可以再加上一个快速幂,当然,不加也是稳稳的,当然,剩下的就没有啥了……看看代码体会一下吧~~~需要熟练掌握先序和后序遍历的性质。代码#in原创 2017-09-04 20:27:00 · 503 阅读 · 0 评论 -
HDU-2017 多校训练赛9-1005-FFF at Valentine
ACM模版描述题解两遍 dfsdfs,正着一遍,反着一遍,准确说不是两遍,而是每个位置都需要两遍,有些暴力的意味,但是还真的 ACAC 了。代码#include <cstdio>#include <vector>#include <cstring>#include <algorithm>using namespace std;const int MAXN = 1111;int n, m;bo原创 2017-08-22 21:02:30 · 481 阅读 · 1 评论 -
HDU-2017 多校训练赛3-1005-RXD and dividing
ACM模版描述题解这个题没有做出来我只承认我英语不好,被斯坦纳树给唬住了……没有读懂这个题真正的意图。实际上就是给定一个树,让你将树划分为多份,然后每份内部的连通花费是固定的,求所有划分块儿的内部连通花费的和的最大值……这不就是一个求每条边贡献的吗?一个搜索就能搞定的事儿……╮(╯▽╰)╭哎,谁成想,当场我就放弃了,题都没有读懂就放弃了……真菜~~~代码#include <iostream>#in原创 2017-08-02 21:57:28 · 392 阅读 · 0 评论 -
51Nod-1623-完美消除
ACM模版描述题解这个题着实难住了我,虽然知道是数位 dp,但是依然是手足无措,找了 光速小子0511 的代码,看了一下,神还原题解啊,必须点赞,太崇拜了……官方题解: 这个官方题解有一个小小的玩笑,我想机智的你仔细看一定是可以看出来的,尽管我没有看出来,我还是看到了讨论区才知道,O(∩_∩)O哈哈~制杖如我!代码#include <iostream>#include <cstring>#in原创 2017-07-22 17:38:48 · 463 阅读 · 0 评论 -
51Nod-1791-合法括号子段
ACM模版描述题解这里,我们需要明确区分一个定义,什么叫做子段?什么叫做子序列?子段是子序列的一种,也叫做连续子序列,而子序列呢?如果不要求连续,则是可以从原序列中任意取,但是要保持原先的先后顺序即可。一开始,并没有仔细区分这个概念,搞得有些手足无措,后来想通了,就是一个简单的分治,分别控制子段的左右两端点在左右两个区间内,然后从中间开始查找,控制左右两个半区间的合法性即可。没什么难度,细心即可。五原创 2017-07-31 11:40:09 · 895 阅读 · 3 评论 -
51Nod-1815-调查任务
ACM模版描述 题解这个题思路倒是很清晰,就是代码有些小长……首先,我们来确定答案和什么相关,这里既然规定,结果是路径上不同城市的模值,那么,这个很容易想明白的是,只要我们维护路径最大值和路径严格次大值即可,因为后者模前者依然等于后者并且是最优解,这个毋庸置疑,注意这里是严格次大值。接着,我们来分析一下这个模型,首先给定我们一个图,并且给定了一个十分有趣的条件,一个点可以被经过多次,那么我们是否会原创 2017-07-17 18:55:22 · 563 阅读 · 0 评论 -
51Nod-1810-连续区间
ACM模版描述题解这个题需要用到分治的思想,最最最重要的一个问题是,合法的连续区间有什么充要条件?这个不难想,某一个区间的最大值和最小值的差加一一定是这个区间的元素个数时才是合法的,因为题中说了,这是 1∼n1 \sim n 的排列,所以不存在重复,而每个相邻的又刚好差 11,那么很明显,上述条件一定成立!这里详细的题解我就贴一下官方题解吧,官方题解说的十分详细,我也不用多费口舌了……代码#incl原创 2017-07-30 00:56:43 · 1085 阅读 · 0 评论 -
SHU-“盛大游戏杯”第15届上海大学程序设计联赛夏季赛暨上海高校金马五校赛-I-丢史蒂芬妮
ACM模版描述题解与其说是博弈论问题,不如说是伪装成博弈论的记忆化搜索问题,通过记忆化搜索来预处理出来所有状态,然后直接访问即可。代码#include <iostream>#include <cstdio>#include <cstring>using namespace std;const int MAXN = 555;int n, m;int prime[MAXN];bool dp[MA原创 2017-07-13 02:33:59 · 912 阅读 · 0 评论 -
51Nod-1513-树上的回文
ACM模版描述题解这个题也没有想象中那么难,主要是对 dfsdfs 序进行处理,我们获取 dfsdfs 序的过程中,记录下来每个子树在 dfsdfs 序中的位置区域,同时也要记录下来不同深度的结点,添加到 vectorvector 中,当然,添加的顺序也是满足 dfsdfs 序的,这样,我们在查找的过程中利用二分即可查找到对应的区段。这个题综合性挺强的,可以好好看看。代码#include <cstd原创 2017-07-14 01:03:17 · 555 阅读 · 0 评论 -
[kuangbin带你飞]专题二-搜索进阶-A-Eight
ACM模版描述 题解传说中和八皇后一样过分经典的搜索问题,所以网上一查,各种强势题解一大堆,更有丧心病狂者,写了《八数码的八境界》这种深度剖析此问题的 blog,让我不敢再多言此题,毕竟我想不了那么系统,所以,我也就只剩下拿着该大牛的 blog 一饱眼福的任务了……这个问题核心就是搜索,不过问题的优化十分多样化,对于这道题,我的选择是 反向bfs + 打表 + hash,成功 AC,对于其他丧心病原创 2017-04-04 17:52:18 · 689 阅读 · 0 评论 -
PAT-天梯赛练习集-L2-020-功夫传人
ACM模版描述题解很简单的一道题,不过出题有些坑了,一看题就知道,这是一个搜索问题,dfs、bfs 都可以用,存储树时我选择的是邻接表,但是却一直24分,拿不到25分。纠结死我了。后来了解到,问题出在 N 为 1 的时候,也就是说只有一个人,既是太师傅,又是得道者(这也太没溜了,一个徒弟也收不了还叫得道者),其实这个我早就想到了,只是有一点我感觉是这个题出的问题,因为题目中说了 Z 是太师傅的功力值原创 2017-03-26 23:59:40 · 2322 阅读 · 4 评论 -
[kuangbin带你飞]专题二-搜索进阶-C-哈密顿绕行世界问题
ACM模版描述 题解这道题水的一笔,放在进阶题是拉低了整体水平,但是有一点特别坑爹,冒号后边要有俩空格,出题人竟然不说明这里,真是无语……一直给我报格式错误 ❌!代码#include <iostream>#include <algorithm>#include <cstdio>using namespace std;const int MAXN = 20;int cs;int map[M原创 2017-04-10 23:41:07 · 378 阅读 · 0 评论