![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
dfs
文章平均质量分 81
WA是一笔财富
这个作者很懒,什么都没留下…
展开
-
hdu 2181哈密顿绕行世界问题 dfs
传送门:hdu 2181中文题就不多说了,唯一值得注意的一点是dfs到最后cnt==20的时候要先判断最后一个城市和第一个城市连不连通再输出。#include #include #include int map[22][22];int book[22];int line[22];int t=0,m;using namespace std;int dfs(int cnt){原创 2016-10-21 16:58:37 · 336 阅读 · 0 评论 -
Promotions Gym - 101128A dfs+思维
PromotionsThe Fair Inc. administration decided to promote the bestemployees and limited the number of promotions to a fixedinterval [A, B]. The directors compared the employees’performance and原创 2017-03-31 17:57:14 · 378 阅读 · 0 评论 -
CodeForces - 622E dfs+贪心
传送门:CodeForces - 622E题意:给定一颗树,每个叶子节点上有一蚂蚁,除了根结点的之外的所有节点任意时刻至多只能有一个蚂蚁,每个蚂蚁每秒能移动到相邻的节点上,问所有蚂蚁移动到根结点的最短时间是多少。思路:一看到树形图在加上求最小值,还以为是树形DP,然而贪心就足够了。因为要求最短时间,所以我们要尽可能地让所有蚂蚁同时动,因此就要让离根节点最近的先到根结点,如果让离根节点远的蚂原创 2017-05-23 11:15:22 · 346 阅读 · 0 评论 -
New Year Tree CodeForces - 620E dfs序+线段树+状压
传送门:CodeForces - 620E题意:给定一棵树,每个节点都有自己的颜色,有两种操作1. 给定v , c,将节点v及其子树都染成c颜色2. 给定v ,统计节点v及其子树上的节点一共有几种颜色。思路:很明显可以就看出来是线段树的操作,但是就是不知道怎么建树。。应该是按照dfs的顺序对所有节点进行重标号,这样每个节点的子树中节点的标号范围也就是连续的了,然后就能进行正原创 2017-05-24 19:44:09 · 234 阅读 · 0 评论 -
山理工校赛 E.bLue的二叉树 dfs序+字符串匹配(KMP、哈希)
传送门:bLue的二叉树思路:求第一棵树的子树有多少个和第二棵树相同,刚看题的时候还看错了,以为是两棵树的子树有多少个相同的,想都没想就写了个哈希,写完发现好像不太对,我是在dfs的过程中哈希的,但是连样例都过不了,就开始怀疑自己是不是子树的定义搞错了。。然后就凌乱了。。正解:将两棵树按dfs序做成字符串,注意空节点也要用一个不会出现在其他节点的值加到字符串当中。做出字符串来后再做个字符串原创 2017-06-05 11:48:33 · 270 阅读 · 0 评论 -
2017浙工大之江学院校赛 M dp||记忆化搜索
Problem M: qwb与二叉树Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 179 Solved: 45[Submit][Status][Web Board]Description某一天,qwb正在上数据结构课。老师在讲台上面讲着二叉树,qwb在下面发着呆。突然qwb想到一个问题:对于一棵n个无编号节点,m个叶原创 2017-06-04 11:14:02 · 404 阅读 · 0 评论 -
HDU 5113 Black And White dfs
传送门:HDU5113本以为这么小的数据量可以不用剪枝,然而事实证明我还是多想了。。关键剪枝为:当某种颜色的剩余数量大于剩余格子数的一半时,直接返回,因为这种情况继续搜下去无论怎么涂色必定有两个相邻的同色,请自行证明。。#include #include #include #include using namespace std;int time[30];int n,m,k原创 2016-11-02 20:35:24 · 252 阅读 · 0 评论 -
HDU 6060 RXD and dividing 思维 + dfs
传送门:HDU6060题意:给出一颗n个节点的树,要求将2-n号节点分成k部分,然后再将每一部分加上1号节点,定义每一部分的val为其中的点在原图上的最小斯坦纳树,问总的val最大可能是多少。最小斯坦纳树乍一看很唬人,其实由于原图是棵树,那么其实就是最小生成树,并且由于原图就是树,其实并没有最小生成树这一说。。就是让s集合中的点在原图上连通所需要的边权。官方题解:把1看成整棵树的根原创 2017-08-01 17:56:32 · 815 阅读 · 4 评论 -
HUD 6035 Colorful Tree dfs序||树形dp
传送门:HDU6035题意:给出一颗树,每个节点有不同的颜色,定义树上路径的长度为一条路径上不同颜色的数量,问所有路径的总长度是多少。思路:这是17年多校第一场的1003,当时看完题还以为是分治什么的,没什么清晰地思路,赛后给的官方题解是:单独考虑每一种颜色,答案就是对于每种颜色至少经过一次这种的路径条数之和。反过来思考只需要求有多少条路径没有经过这种颜色即可。直接做可以采用虚原创 2017-07-26 16:00:56 · 228 阅读 · 0 评论 -
HDU 6044 Limited Permutation dfs + 组合数(读入挂)
传送门:HDU6044题意:给出n个区间,对于第i个区间[li,ri]有li一开始没看到题目中的if and only if,看人家的博客都看不懂。。后来翻到一篇使我醍醐灌顶的博客,点击打开链接转载至下:首先要理解题意:当前仅当li因此对于P[i]一定有P[i]>P[li-1]且P[i]>P[ri+1],进一步说区间[li,ri](除了[1,n])一定被某个区间[lj,rj]包原创 2017-07-26 23:43:34 · 838 阅读 · 0 评论 -
CodeForces - 841D Leha and another game about graph 构造(dfs + 思维)
传送门:Codeforces 841D题意:给出一个连通图,并给每个点赋一个d值0或1或-1,要求选出一个边的集合,使得所有的点i要么d[i] == -1,要么dgree[i] % 2 == d[i],dgree[i]代表i结点的度数。思路:首先我们考虑一条边都不选的情况,此时所有d[i] == 0的i都满足了题目要求,此时如果有d[i] == 1的点,我们就要加一条边,我们考虑用df原创 2017-08-20 21:48:48 · 1057 阅读 · 0 评论 -
HDU 5952 Counting Cliques dfs + 思维
传送门:HDU5952题意:给出一个无向图,问其中点集大小为S的无向完全子图的个数。思路:就是暴搜,但是建图有技巧,因为搜索过程中很容易出现重复序列,比如我们第一次搜到的答案是1 2 3,下一次搜到的是1 3 2,这两个实际上是同一种子图,搜索这些无用状态既浪费时间,去重还很麻烦。技巧就是建图的时候建成有向图,只让标号小的顶点指向标号大的顶点,这样搜出来的序列一定是一个 v1 代码:原创 2017-08-06 21:25:59 · 276 阅读 · 0 评论 -
HDU - 5802 Windows 10 dfs + 贪心
传送门:HDU 5802题意:调节音量p到q,上升音量每秒只能上升1,下降音量每秒为2*x,x为上一秒下降的音量,如果下降时休息或者上升音量则下一次下降音量时只能下降1,音量最低为0,问最少需要多长时间。思路:搜索过程中记录操作次数,停顿次数,连续下降的过程不采用搜索而是直接求得,因为我们连续下降的话要么是降到第一次比q低,要么在第一次比q低的前一次停下,这个过程是完全可以直接求出来的,那原创 2017-09-15 14:35:41 · 245 阅读 · 0 评论 -
HDU - 4778 Gems Fight! 记忆化搜索 + 状压
传送门:HDU4778题意:有 G 种颜色的宝石,放在 B 个袋子里,两人轮流选袋子(每个袋子只能被选 1 次),每次将选出来的袋子中的宝石放到 cooker 中,cooker 可能会起反应。反应条件是 cooker 中出现至少 S 个一样颜色的宝石,而且一旦起反应,每 S 个一样颜色的宝石就会获得 1 个魔法石。作为奖励,每次获得魔法石的玩家可以再选一个袋子继续游戏,若未获得魔法石,原创 2017-09-25 23:58:38 · 282 阅读 · 1 评论 -
ZOJ-3781-Paint the Grid Reloaded 缩点+建图+spfa
传送门:ZOJ 3781题意:给定一个由O和X组成的矩阵,每次可以选择一块翻动,与其相邻的且符号一样的也会一起翻动,即每次翻动一个连通块。问最少几步能把整个矩阵翻成同样的符号。思路:将每个连通块缩成点,相邻的连通块建边,于是题目就转化成了新建的图一个点到其他点的最长最短路最短最多少。个人感觉这层转化是最难的,正所谓图论难就难在建图吧。关于转化的个人理解:因为每次翻动一个连通块,就相原创 2017-03-24 12:04:35 · 279 阅读 · 0 评论 -
poj1011 sticks
传送门:poj1011题意:给你一些长度不同的棍子,让你把他们拼成长度相同的新棍子,问最小长度是多少枚举所有可能长度,dfs并不难写,重点是剪枝,将棍子长度按从大到小排序后从前往后dfs,这里有一点是如果把一个棍子当要组成的新棍子的第一根都无法组合成功,那么放在后面更不可能和其他棍子组成想要的长度了,可以这样考虑:如果这个棍子在后面那么多棍子都还没用的情况下都和它们组成不了想要的长度,等到原创 2016-10-21 20:07:45 · 422 阅读 · 0 评论 -
hdu1010 Tempter of the Bone(dfs)
传送门:hdu1010因为是在规定的时间点到达目的地所以必须用深搜。。自己写的深搜用尽浑身剪枝方法才勉强压线950ms过。。搜一发题解才发现对于这种确定时间到达的有一种很奇妙的剪枝方法,奇偶剪枝。。我就直接转了吧。。奇偶剪枝详解附上我自己写的代码#include #include #include #include int n,m,T,flag=0;int sc,sr转载 2016-10-21 20:50:34 · 195 阅读 · 0 评论 -
hdu1175 连连看dfs
传送门:hdu1175其实这个题深搜广搜都可以,但是广搜本来就用的不熟练,再加上还只能转两次弯,根本就不知道该怎么写入队条件,于是果断选择了深搜。。这里有一个重要剪枝是当转弯次数为2的时候先不要进行下一次dfs,直接判断目标点在不在前进方向中就行了,不剪的话铁定超时。。#include #include #include int n,m,x1,x2,y1,y2,flag=0;int原创 2016-10-21 21:10:49 · 809 阅读 · 1 评论 -
hdu5024 Wang Xifeng's Little Plot记忆化搜索
传送门:hdu5024题意:求从图中任意一点出发的最长路(只能拐一次弯)一开始自己写的枚举每个点然后TLE,看了题解才发现自己思维太僵化了。。应该枚举拐点,枚举每个点的两两成直角的方向。这其中又加入了一个记忆数组dp[i][j][dir],用来记录i,j点在dir方向最多能走多远,直接将时间优化到0ms。。#include #include #include #include原创 2016-10-21 21:30:21 · 282 阅读 · 0 评论 -
poj1190 生日蛋糕 dfs
传送门:poj1190由于高度和半径都是整数因此可以用bfs来做,关键是如何剪枝。由于蛋糕是一层层摞上去的,而最底层下底面面积又不算,因此所有底面积的和就相当于一个底面积,即最下面那一层的上底面的面积,剩余部分就都是侧面积了。经过以上分析,假设最上面一层为第一层,由于下面的蛋糕要比上面的大,因此每一层的最小面积(不考虑底面积)就成了h和r都取i(i为第几层)的时候,即第i层的最小面积为2*原创 2016-10-21 19:01:33 · 314 阅读 · 0 评论 -
Maze(codeforces377a)dfs,思维
传送门:377a。题意:给你一个图,将k个‘.’变成‘X’,使剩下的‘.’仍然连通,图中还有‘#’。思维关键点是既然他要你修改k个,那么假设一开始有s个,则dfs搜索到k-s个的时候停止就好了,没被搜索到的就是要修改的,这样可以保证剩下的必定连通。#include #include #include int n,m,k;int go[4][2]={0,1,1,0,0,-1,-1,0原创 2016-10-15 20:21:01 · 632 阅读 · 0 评论 -
poj2676 sudoku dfs
传送门:poj2676题意就是解数独呗。。解题的关键在于book数组,一开始我的book[i][j][k]是用来记录i,j点上可不可以用k这个数字,然后dfs的时候每在i,j点填入一个值k,就将第i行第j列和i,j所在的小九宫格中所有的节点对应的标记数组更新(即把k标记为不可用),但是这样在回溯过程中会有一个巨大的并且基本无法弥补的bug,就是一开始大九宫格中就有固定的数,因此有些位置在d原创 2016-10-21 18:23:17 · 302 阅读 · 0 评论 -
棋盘问题(poj1321)dfs
传送门:poj1321。因为k个棋子不同行不同列,假设每个棋子都有编号1,2,3....可以推知,假设当前行c已摆放棋子,则从当前行往下,1号棋子可以放置的行有c到n-(k-1)+1,2号棋子放置的行有c到n-(k-2)+1......摆放了t个棋子以后下一个棋子可以摆放的行为c到n-(k-t)+1,需要注意的是可以摆放的行不是一定能摆放,还要看这一行里有没有#所在的列没有被标记出来,然后df原创 2016-10-15 19:53:47 · 232 阅读 · 0 评论 -
codeforces723D.Lakes in Berland(dfs)
传送门:723D。题意:用最少的步数把连通块的数量改变到指定值k,注意最外层的连通块不算。了解题意以后立马想到的就是dfs,不过实现过程却是这卡那卡,其实这个题解法和Floodfill算法很相似,不过首先要注意的就是不能在原输入数组上进行涂色修改,必须另外开辟数组涂色,其次就是因为题中要删除的连通块不只一个,所以就要记录每种涂色的颜色和数量,按数量排序后取数量少的再改变原数组中对应的符号,原创 2016-10-08 16:18:23 · 285 阅读 · 0 评论 -
Poj 1014简单dfs
传送门:POJ1014题意:给你1-6六个数,分别有不一定的数量,问你能不能凑成和相等的两部分。其实这个题真的很水啊,真的真的很水啊,可是月赛的时候愣是让三个人TLE的一晚上,想尽办法剪枝,又剪成了WA。。最后赛完发现是回溯的问题。。。这题根本不用回溯。。带上回溯必定超时,不回溯的原因是:dfs的时候已经保证了每次加入一个新数时不能超过sum/2,所以只需要一口气搜到底就好了,如果这次拼不原创 2016-11-02 17:00:33 · 275 阅读 · 0 评论 -
POJ2688Cleaning Robot bfs+dfs
传送门:poj2688题意:从求从给定点出发,遍历所有标记出来的点的最短路。这题思维很巧妙啊,因为有多个标记点,所以先用bfs求出任意两个标记点以及起始点和任意标记点之间的最短路径,这样就变成了变种的TSP(旅行商)问题,即求遍历所有点的最短路,这时再用dfs求解就行了。#include #include #include #include #include using name原创 2016-11-02 17:29:07 · 224 阅读 · 0 评论 -
POJ2531 Network Saboteur dfs
传送门:POJ2531题意:有几台电脑,每两台电脑之间有固定的流量,要求将这些电脑分成两部分,使这两部分之间的流量总和最大。解法:dfs搜索其中一堆,如果将第i台电脑加进去能将两部分之间的流量变大的话,就将这一台标记出来加入这一堆,并更新流量最大值,否则就放入另一堆。#include #include #include using namespace std;int map[2原创 2016-11-02 18:53:10 · 209 阅读 · 0 评论 -
poj1753 枚举+深搜
题目链接:http://poj.org/problem?id=1753本题要注意的就是深搜时的归位问题,以及枚举步数时的最大翻动次数,16是个思维点。//Memory Time //132K 344MS #include #include #include using namespace std;int chess[6][6];//中间4*4方阵有效 int r[5]={原创 2016-09-18 15:16:30 · 427 阅读 · 0 评论 -
HDU1560 DNA sequence IDA*
传送门:HDU1560题意:给定n个子序列,求包含这n个子序列的最短序列。思路:由于只要输出最短长度,所以可以用IDA*,每次增加搜索深度,当某次搜索成功,这个深度就是最短的字符串长度。关键就是IDA*中的h值怎么估算,一开始我用的是很容易想到的找差的数量最多的字符串s,s差的字母数量作为h值,这样能够水过这个题了,但是其实还不够,像下面这组数据就跟本跑不出来:18AAAA原创 2017-01-23 20:46:53 · 312 阅读 · 1 评论 -
CodeForces - 859D Third Month Insanity dfs + 概率期望
传送门:Codeforces 859D题意:有 2^n 个队伍进行比赛,每次都是编号相邻的的两队伍比赛,胜出的晋级下一轮,失败的淘汰,这样n轮过后只剩一只队伍时停止。每一场比赛你都可以赌某个队伍赢,第一轮赌中了获得一分,后面每轮赌中得分翻倍,现在给出每两个队伍比赛的胜负概率,问你最大得分期望是多少。整个比赛过程其实就是一颗完全二叉树,每一轮比赛对应二叉树的一层,每一场比赛对应二叉树原创 2017-09-22 12:46:03 · 506 阅读 · 0 评论