
DFS
ssllyr
锦瑟无端五十弦,一弦一柱思华年。
展开
-
【AtCoder - abc311_d】Grid Ice Floor【DFS】
显然搜索题,但是范围是两百,不能每个点都递归,参照之前的题,会出现一些能递归的关键点。我们先对于每个点上下左右走到头,求出每个点对应的下一个关键点,然后从起点开始递归,对于每个点记录有没有“走过”,和有没有递归过,然后到达每个点都去找关键点就行。原创 2023-08-22 15:14:02 · 250 阅读 · 0 评论 -
【CF1671E】Preorder【计数】
赛时已经想到了子树*2的方法,但是没想到怎么去掉重复的东西,实际上已经很接近答案了。在子树本质相同的时候,通过交换是没法*2的,所以就记录字典序,比较最小字典序是否相同,这个可以用DFS实现。原创 2023-08-21 15:33:06 · 61 阅读 · 0 评论 -
【CF734E】Anton and Tree【树的直径】
一开始理解错题意了,直接暴力判断连通块个数,我就说怎么这么简单。。。其实这个颜色的连通块是会动态变化的,染色之后可能会有合并连通块的发生。问题好像瞬间复杂了起来。但是在染色的时候连通块一定会一起被染色,于是就相当于一个点了,我们也用DFS去缩成一个点,不难发现,新的一棵树上,都是黑白点交替出现的。想到这里可能觉得跟树的深度有关,但是换根深度也会变化。实际上答案就是(树的直径+1)/2,从直径的中点开始染色就行,只要想到直径方案是显然的。原创 2023-08-19 21:02:35 · 107 阅读 · 0 评论 -
【HDU3639】Hawk and Chicken【tarjan】
tarjan,DFS原创 2023-08-04 19:55:06 · 88 阅读 · 0 评论 -
【洛谷P2258】子矩阵【DFS+DP】
但是这次有点不太一样的理解,由于子矩阵的定义,直接枚举肯定超时,所以就考虑行和列枚举其中一个,然后另一个跑DP。具体怎么枚举呢,这里的枚举用搜索实现,可以得出所有行或者列的组合,这次我就枚举了列的组合。本题任务:给定一个 n 行 m 列的正整数矩阵,请你从这个矩阵中选出一个 r 行 c 列的子矩阵,使得这个子矩阵的分值最小,并输出这个分值。不难发现,枚举列,按行DP,枚举行,按列DP都可以得出答案,恰好就是我之前和现在两种不同的做法。的最小分数,枚举一个k,表示上一行选的是第k行,k的范围显然是。原创 2022-08-21 19:20:12 · 295 阅读 · 0 评论 -
【8.8gzoj综合】【洛谷P1041】传染病控制【DFS】
DFS原创 2022-08-11 08:57:26 · 187 阅读 · 0 评论 -
【洛谷P1092】【NOIP2004 tg】虫食算【DFS】
DFS原创 2022-08-06 11:41:39 · 200 阅读 · 0 评论 -
【8.5gzoj综合T7】【2011特长生T4】民生问题【DFS优化】
DFS优化原创 2022-08-06 08:32:48 · 103 阅读 · 0 评论 -
【51nod】邻之差为k【DFS】
分析暴搜每一个位置,开头从1开始,每次记录和,再取最后一位暴搜。上代码#include<iostream>#include<cstdio>#include<algorithm>using namespace std;int n,k;void dfs(int dep,int s){ if(dep==n) { cout<<s<<' '; s=0; return; } if(s%10-k>=0) {..原创 2022-01-19 16:41:10 · 253 阅读 · 0 评论 -
【8.19模拟赛T1.7236】[USACO21FEB] Comfortable Cows S【DFS】
题目链接:https://www.luogu.com.cn/problem/P7411分析DFS。搜索所有舒适的奶牛,并且让她不舒适,因为有可能加入新的奶牛之后又有新的变成舒适,所以要二次递归,注意记录v数组上代码#include<iostream>#include<cstdio>#include<algorithm>using namespace std;typedef long long ll; ll n,ans;int v[3007][3..原创 2021-08-20 21:18:03 · 313 阅读 · 0 评论 -
【8.14模拟赛.7218】【洛谷P7074】 [USACO21OPEN] Maze Tac Toe S【DFS】
题目链接:洛谷分析一开始调了好久aaa显然是DFS,看看怎么处理。首先这个是以三个字符作为一个字符,最边上一列肯定是‘#’,所以后面我们全部都*3+1就可以。这题用三进制状压去存储每一个棋盘状态,如果这个状态是搜索过的就直接跳过。用1,2分别代表M,O,去填棋盘,然后每次都判断是否胜利,用win数组记录胜利的棋盘,以防下次重复统计。判断胜利:棋盘的胜利状态只有16种。把状态倒出来之后,判断就好。上代码#include<iostream>#include<cstdio>原创 2021-08-17 14:44:17 · 247 阅读 · 0 评论 -
【gmoj4766】【8.13模拟赛T3】Word【暴力枚举】
题目链接:Word分析第一个数组建立出“窗口”,然后枚举两个不同的地方,原创 2021-08-15 19:11:24 · 88 阅读 · 0 评论 -
【gmoj4765】【8.13模拟赛T2】Crisis【DFS】
题目链接:Crisis分析输入的时候标记叶子节点,点权记为1。然后son[i]son[i]son[i]表示iii最多要几个儿子提交请愿书他才会提交请愿书(儿子个数乘一下概率就行)。遍历一遍树,求出每个节点最小的son[i]son[i]son[i]个儿子。一直到根节点可能数据比较水,没有那种一个节点超级多个儿子的那种,没有卡掉我的ans数组。上代码#include<iostream>#include<cstdio>#include<algorithm>u.原创 2021-08-14 16:35:27 · 77 阅读 · 0 评论 -
【gmoj4743】【8.11模拟赛T1】积木【状压DP/暴搜】
题目链接:积木分析这题数据也太水了吧我喜欢可以直接暴力搜索每一个积木的每一个顺序的每一种放置方法。阶乘级别的复杂度,居然能过就离谱。正解是状压DP。f[i][j][k]f[i][j][k]f[i][j][k]当中:iii表示积木选择的状态,每一位的0/1表示这个积木有没有被选中,jjj表示最上面的那个积木,k表示哪一种放法(0,1,2)。枚举l,gl,gl,g可以得出转移:f[i|(1<<(l-1))][l][g]=max(f[i|(1<<(l-1))][l]...原创 2021-08-11 19:10:54 · 100 阅读 · 0 评论 -
【luogu P5018】【NOIP2018pjT4】对称二叉树【DFS】
题目链接:对称二叉树分析枚举每个节点作为根。判断这棵树是否对称。对于每个左儿子右儿子,每次递归左儿子的左儿子,右儿子的右儿子;左儿子的右儿子,右儿子的左儿子。如果两个都是-1,那么贡献为0,但还是有对称性。然后从结构,权值两个来判断对称性,每一对的贡献都是2,否则整棵树都不对称,标记一下并返回。最后把所有有答案的树求max上代码这个NOIP如果没有摆渡车撑场就要变水题大会¿¿又是3年前的愿望#include<iostream>#include<cstdio>.原创 2021-08-09 21:31:15 · 144 阅读 · 0 评论 -
【gmoj3501】【luoguP2018】【7.13提高B组T1】消息传递【树上记忆化搜索】
对于100%的数据,满足N<=200000分析用枚举所有根然后转移的方法可以有20pts但是发现若a≠ba≠ba=b时aaa做根和bbb做根时儿子相同,就可以拿第一次计算出来的fxf_xfx作为返回值。具体就是对于每个相同的sonxson_xsonx用d[x][fax]d[x][fa_x]d[x][fax]记录值,下次相同直接用,完成记忆化搜索。最后用faxfa_xfax连向xxx的单向边把空间优化成O(n)O(n)O(n)这个算法在洛谷稳过,但是在gmoj只能拿70pt...原创 2021-07-14 08:00:50 · 67 阅读 · 0 评论 -
【ybtoj 高效进阶 1.4】C.虫食算【DFS】
分析记录下字母的出现顺序(从右往左)枚举每个字母可能的数字a是加数一,b是加数二,c是和当这三个数已经填数时如果(a+b+w)%n!=c说明不可行如果最高位还有进位也不可行当右边还有数没填如果(a+b)%n!=c且(a+b+1)%n!=c,说明不可行如果最高位有进位不可行否则进位赋为-1上代码#include<iostream>#include<cstdio>#include<algorithm>#include<cstring..原创 2021-01-09 17:16:59 · 111 阅读 · 0 评论 -
【ybtoj 高效进阶 1.4】B.数独游戏【深搜】
分析用字符串输入将其转换成数值放入数组a数组lll统计当前行数字的使用情况数组rrr统计当前列数字的使用情况数组fff统计当前3*3方格数字的使用情况枚举当前格可以填的数字上代码#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>using namespace std;int a[10][10],l[10][10],r[10][10],f[10.原创 2021-01-09 17:14:13 · 159 阅读 · 0 评论 -
【ybtoj 高效进阶 1.4】A.拔河比赛【DFS】
分析版子题。有用这个人和不用两种情况。直接搜索所有情况上代码#include<iostream>#include<cstdio>#include<algorithm>using namespace std;int t,n,a[1001],mi,s,m;void dfs(int x,int y,int z){ if(y==m) { mi=min(mi,abs(s-2*z)); return; } if(x>n) retur..原创 2021-01-09 17:03:36 · 156 阅读 · 0 评论 -
【2020.10.28SSL普及模拟赛T6】【POPULAR受欢迎的牛】【DFS】
题目描述每头牛都有一个梦想:成为一个群体中最受欢迎的名牛!在一个有N(1<=N<=10,000)头牛的牛群中,给你M(1<=M<=50,000)个二元组(A , B ) 表示A认为B是受欢迎的。既然受欢迎是可传递的,那么如果A认为B受欢迎,B又认为C受欢迎,则A也会认为C是受欢迎的,哪怕这不是十分明确的规定。你的任务是计算被所有其它的牛都喜欢的牛的个数。输入第一行,两个数,N和M。第2~M+1行,每行两个数,A和B,表示A认为B是受欢迎的。输出一个数,被其他所有奶牛认为受欢原创 2020-10-29 10:11:49 · 142 阅读 · 0 评论 -
【2020.10.26 SSL模拟赛T3】棋盘行走【dfs】
分析直接裸的DFS。两个条件:判断能否走下一步,以及有没有走超过4步。记得回溯。喜闻乐见的裸题上代码#include<iostream>#include<cstdio>#include<algorithm>using namespace std;int n,m;int dx[5]={0,1,0,-1};int dy[5]={-1,0,1,0};bool ans,v[2500][2500],a[2500][2500];char b[250...原创 2020-10-28 19:54:38 · 120 阅读 · 0 评论 -
【ssl1082】拦截导弹【最长不上升子序列】【最小路径覆盖】
Description某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。输入导弹依次飞来的高度(雷达给出的高度数据是不大于30000的正整数),计算这套系统最多能拦截多少导弹,如果要拦截所有导弹最少要配备多少套这种导弹拦截系统。Sample Input300 250 275 252 2原创 2020-08-22 15:22:35 · 160 阅读 · 0 评论 -
【ssl1340】最小路径覆盖【最小路径覆盖】【最大匹配】
Description定义: 一个不含圈的有向图G中,G的一个路径覆盖是一个其结点不相交的路径集合P,图中的每一个结点仅包含于P中的某一条路径。路径可以从任意结点开始和结束,且长度也为任意值,包括0。请你求任意一个不含圈的有向图G的最小路径覆盖数。提示:最小路径覆盖数=G的定点数-最小路径覆盖中的边数最小路径覆盖数=原图G的顶点数-二分图的最大匹配数Inputt 表示有t组数据;n 表示n个顶点(n<=120);m 表示有m条边;接下来m行,每行有两个数 i,j表示一条有向边。Outpu原创 2020-08-22 15:05:37 · 157 阅读 · 0 评论 -
【ssl1333】地鼠的困境【最大匹配】【匈牙利算法】
Description地鼠家族面临着一个新的威胁——猎食者。 地鼠家族一共有N个地鼠和M个鼠洞,每个都位于不同的(x, y)坐标中。假如有地鼠在发觉危险以后s秒内都没有回到鼠洞里的话,就可能成为老鹰的食物。当然了,一个鼠洞只能拯救一只地鼠的命运,所有地鼠都以相等的速度v移动。地鼠家族需要设计一种策略,使得老鹰来时,易受攻击的地鼠数量最少。Input本题有多组数据。第1行为测试数据组数T(T<=50)。对于每组数据,第一行4个整数n, m, s和v(n, m <= 100)。以后n行为原创 2020-08-22 14:45:49 · 752 阅读 · 0 评论 -
【ssl1344】Knight【二分图匹配】【最大独立集】
Description一张大小为n的国际象棋棋盘,上面有一些格子被拿走了,棋盘规模n不超过200。马的攻击方向如下图,其中S处为马位置,标有X的点为该马的攻击点。你的任务是确定在这个棋盘上放置尽可能多的马,并使他们不互相攻击。Input输入n,m,表示棋盘有n行,m个点在棋盘中被拿走了。下面输入x,y为被拿走的点的坐标Output输出能放置的最多的马的数量,使它们不互相攻击Sample Input3 21 13 3Sample Output5分析首先为什么是求最大独立集?原创 2020-08-22 08:07:19 · 137 阅读 · 0 评论 -
【ssl1341】Asteroids【二分图】【匈牙利算法】【最大匹配问题】
DescriptionBessie wants to navigate her spaceship through a dangerous asteroid field in the shape of an N x N grid (1 <= N <= 500). The grid contains K asteroids (1 <= K <= 10,000), which are conveniently located at the lattice points of the g原创 2020-08-21 20:27:19 · 157 阅读 · 0 评论 -
【ssl1338】人员分配【二分图】【最大匹配(模板)】【匈牙利算法】
Description设有M个工人x1, x2, …, xm,和N项工作y1, y2, …, yn,规定每个工人至多做一项工作,而每项工作至多分配一名工人去做。由于种种原因,每个工人只能胜任其中的一项或几项工作。问应怎样分配才能使尽可能多的工人分配到他胜任的工作。这个问题称为人员分配问题。Input第一行两个整数m,n分别为工人数和工作数。接下来一个整数s,为二分图的边数。接下来s行,每行两个数ai,bi表示第ai个工人能胜任第bi份工作Output一个整数,表示最多能让多少个工人派到自己的胜原创 2020-08-21 19:21:52 · 496 阅读 · 0 评论 -
【ssl1383】车2(II)【状压DP】
Sample Input3 3 2Sample Output24分析做状压DP的我心态逐渐爆炸。首先我们要用DFS枚举每一行的状态。用a[js]a[js]a[js]表示状态的二进制数,num[js]num[js]num[js]表示每行棋子的个数。void dfs(int ans,int dep,int ff){ if(dep>n) { js++; a[js]=ans; num[js]=ff; return; } dfs(ans,dep+1,ff); df.原创 2020-08-19 21:55:24 · 158 阅读 · 0 评论 -
【poj3321】Apple Tree【树状数组】
描述卡卡家门外有一棵苹果树。每年秋天,树上都会种很多苹果。卡卡非常喜欢苹果,因此他一直在精心培育大苹果树。该树有N个分支,这些分支由分支连接。Kaka用1到N对叉进行编号,并且根始终用1编号。在叉上将生长苹果,而在同一叉上将不会生长两个苹果。卡卡想了解子树中有多少苹果,以便研究苹果树的生产能力。问题在于,有时空叉上会长出一个新苹果,卡卡可能会从树上摘下一个苹果作为甜点。你能帮卡卡吗?输入第一行包含一个整数Ñ(Ñ ≤100,000),这是树中的叉的数量。接下来的N -1行分别包含两个整数u和v,原创 2020-08-19 08:49:06 · 891 阅读 · 0 评论 -
【ssl1608】皇宫看守【树形DP】
Description太平王世子事件后,陆小凤成了皇上特聘的御前一品侍卫。皇宫以午门为起点,直到后宫嫔妃们的寝宫,呈一棵树的形状;某些宫殿间可以互相望见。大内保卫森严,三步一岗,五步一哨,每个宫殿都要有人全天候看守,在不同的宫殿安排看守所需的费用不同。可是陆小凤手上的经费不足,无论如何也没法在每个宫殿都安置留守侍卫。Input帮助陆小凤布置侍卫,在看守全部宫殿的前提下,使得花费的经费最少。Output输入文件中数据表示一棵树,描述如下:第1行 n,表示树中结点的数目。第2行至第n+1行,每原创 2020-08-15 15:27:51 · 894 阅读 · 0 评论 -
【ssl1743】Debug【树形记忆化搜索】
DescriptionBugzilla由N个基地组成。这N个基地被N-1段双向地道连接在一起,每段地道都连接两个基地,并且保证任意两个基地之间都可以通过地道互相到达。Bug就藏在其中的某段地道中。 开始时rc可以乘坐运输机降落在任何一个基地。每次到达一个基地时,rc都可以选择呼叫运输机将他和他的部队运输到任意另一个基地,或者进入与这个基地相邻的一段地道进行搜索。但为了防止Bug跑进已经搜索过的地道,他在离开一个基地进入地道或登上运输机时一定会将这个基地炸毁。基地一旦被炸毁就不再和与它相邻的地道连接。但原创 2020-08-15 09:04:08 · 141 阅读 · 1 评论 -
【ssl1565】将功补过【树形DP】
Description军事中心是一个严格的二叉树,也就是说,如果有个点可以分道,一定是分出,也只分出2条道路,现在Elvis Han正处在第一个分道处,也就是说树的根结点处。每条道路上都有一个分数,就是这个道路上的情报价值。但是他只有时间走M条路,他的最终情报价值总和就是他所经过的路的情报价值总和(假设他到过的路一定可以把所有情报得到)希望你给出一个方案使得他可以尽量多地获取情报以便将功补过。Input共有N行:第一行:3个数据:N,M,Q(N表示有多少个路口,包括分道和不分道的路口;M表示他可以有原创 2020-08-14 21:01:16 · 128 阅读 · 0 评论 -
【洛谷P2015】二叉苹果树【树形DP】
Description有一棵苹果树,如果树枝有分叉,一定是分2叉(就是说没有只有1个儿子的结点)这棵树共有N个结点(叶子点或者树枝分叉点),编号为1-N,树根编号一定是1。我们用一根树枝两端连接的结点的编号来描述一根树枝的位置。下面是一颗有4个树枝的树2 5\ /3 4\ /1现在这颗树枝条太多了,需要剪枝。但是一些树枝上长有苹果。给定需要保留的树枝数量,求出最多能留住多少苹果。Input第1行2个数,N和Q(1<=Q<= N,1Output一个数,最多能留住的苹果的原创 2020-08-13 22:08:48 · 282 阅读 · 0 评论 -
【ssl1230】战略游戏【树形DP】
DescriptionBob喜欢玩电脑游戏,特别是战略游戏。但是他经常无法找到快速玩过游戏的办法。现在他有个问题。他要建立一个古城堡,城堡中的路形成一棵树。他要在这棵树的结点上放置最少数目的士兵,使得这些士兵能了望到所有的路。注意,某个士兵在一个结点上时,与该结点相连的所有边将都可以被了望到。 请你编一程序,给定一树,帮Bob计算出他需要放置最少的士兵。Input输入文件中数据表示一棵树,描述如下: 第一行 N,表示树中结点的数目。 第二行至第N+1行,每行描述每个结点信息,依次为:该结点原创 2020-08-14 16:29:42 · 111 阅读 · 0 评论 -
【洛谷P2014】【CTSC1997】选课【树形DP】
输入样例7 42 20 10 42 17 17 62 2输出样例13分析将二叉苹果树转为多叉树即可,怎么转呢?就是把处理过的所有子树合并看成左子树,右边第一棵树看做右子树。DP的转移方程也是一样的f[i][j]=max(f[i][j],f[y][k]+f[i][j−k−1]+v[x][y])f[i][j]=max(f[i][j],f[y][k]+f[i][j−k−1]+v[x][y])f[i][j]=max(f[i][j],f[y][k]+f[i][j−k−.原创 2020-08-14 14:56:22 · 153 阅读 · 0 评论 -
【poj2342】Anniversary party【树形DP】
题目大意poj英文原题&样例(周年聚会)网页翻译器大家自己看。分析这个题真的跟没有上司的晚会一模一样!!只是改了一下题目描述。同样是找到根节点之后开始边递归边DP。由题意得,父节点(上司)选了,那么所有儿子(下属)都不能选;父节点不选,那么所有儿子可选可不选。我们设f[i][1]f[i][1]f[i][1]为选了iii中这个点的最大活跃度,f[i][0]f[i][0]f[i][0]为不选这个点的最大活跃度。所以动态转移方程:f[i][1]=f[i][1]+f[a[i].y][0]f[i]原创 2020-08-14 09:29:12 · 126 阅读 · 0 评论 -
【洛谷P1040】【ssl1033】加分二叉树【树形记忆化搜索】
Description设一个n个节点的二叉树tree的中序遍历为(l,2,3,…,n),其中数字1,2,3,…,n为节点编号。每个节点都有一个分数(均为正整数),记第j个节点的分数为di,tree及它的每个子树都有一个加分,任一棵子树subtree(也包含tree本身)的加分计算方法如下:subtree的左子树的加分× subtree的右子树的加分+subtree的根的分数若某个子树为主,规定其加分为1,叶子的加分就是叶节点本身的分数。不考虑它的空子树。试求一棵符合中序遍历为(1,2,3,…,n)原创 2020-08-13 20:29:56 · 231 阅读 · 0 评论 -
【ssl1127】方程的解数【较难的哈希表】【DFS深搜】
DescriptionInput第1行包含一个整数n。第2行包含一个整数M。第3行到第n+2行,每行包含两个整数,分别表示ki和pi。两个整数之间用一个空格隔开。第3行的数据对应i=1,第n+2行的数据对应i=n。Output仅一行,包含一个整数,表示方程的整数解的个数。Sample Input31501 2-1 21 2Sample Output178hint1<=n<=6;1<=M<=150方程的整数解的个数小于231。★本题中,指数原创 2020-07-22 11:08:07 · 281 阅读 · 0 评论 -
2020寒假【gmoj2412】【clocktree】【DFS+邻接表】
题目描述Farmer John 的新牛棚的设计十分奇怪:它由编号为 1…N 的 N 间房间(2≤N≤2500),以及 N−1 条走廊组成。每条走廊连接两间房间,使得每间房间都可以沿着一些走廊到达任意其他房间。牛棚里的每间房间都装有一个在表盘上印有标准的整数 1…12 的圆形时钟。然而,这些时钟只有一根指针,并且总是直接指向表盘上的某个数字(它从不指向两个数字之间)。奶牛 Bessie 想要同...原创 2020-04-22 11:56:09 · 451 阅读 · 1 评论 -
2020寒假【gmoj2407】【Bucket Brigade】【深搜】
题目描述农场上起火了,奶牛们正在紧急赶去灭火!农场可以用一个像这样的10×10的字符方阵来描述:字符’B’表示正着火的牛棚。字符’L’表示一个湖,而字符’R’表示农场上的一块巨大岩石。奶牛们想要沿着一条湖到牛棚之间的路径组成一条“水桶传递队列”,这样她们就可以沿着这条路径传递水桶来帮助灭火。当两头奶牛在东南西北四个方向上相邻时水桶可以在她们之间传递。这对于湖边的奶牛也是对的——奶牛只能在紧...原创 2020-04-03 19:50:17 · 511 阅读 · 1 评论