DFS
aozil_yang
这个作者很懒,什么都没留下…
展开
-
例题6-13 UVA 1103 Ancient Messages 古老象形符号
简单说下题意:给你一个H行W列的字符矩阵,他们是压缩后的十六进制矩阵,把每一个字符变成四个二进制数后,1代表黑像素,0代表白像素,问这些像素组成的图案是题目6种的哪一种!题意有几个需要注意的地方:书中分析说数白洞个数!但有可能多个图案放在一起,如何分开呢,那就是上下左右不相互有公共边,斜着就不算了!思路:1.把他们存到int二维数组里面,1写成-1,0还是0,然后先第一原创 2016-02-20 12:51:07 · 589 阅读 · 0 评论 -
例题7-7 UVA 1354 Mobile Computing (搜索+二叉树(类哈夫曼树))
思路:想一想就可以知道,一个结点要么有两个儿子,要么没儿子。那么这就很像哈夫曼树,因此我们可以枚举所有的哈夫曼树(任意枚举两个不同的结点来合并)然后从根结点开始遍历二叉树,在遍历的同时,来枚举左边 和右边的最大值。然后R-L 便是这个二叉树的宽度。更新一下答案即可!有一个小小的坑把,没注意到:就是只有一个砝码的时候,答案应该是0 不是-1.想一想还是很实际的:只原创 2017-01-22 16:17:21 · 404 阅读 · 0 评论 -
UVA 12219 Common Subexpression Elimination (dfs瞎搞)
大体题意:给你一个字符串按照二叉树的形式,用消除公共表达式的方法可以减少表达式树上的的结点,输出最少的结点的图,详细见原题。思路:写的比较乱,感觉时间还行吧。借鉴一下吧。先写dfs 建树,在写个dfs2 从叶子结点向上更新父结点 重新标号,使得相同类的结点归为一类。在写个dfs3,重新从根节点标号,变得有序。最后print 函数 要么输出数字 要么输出字符串 讨论一下即可原创 2017-02-20 22:23:30 · 386 阅读 · 0 评论 -
UVA 307Sticks(dfs搜索)
大体题意:给你n个木棍,要求分配这个n 个木棍到x组,使得x组的木棍长度和都相同,问最小的长度和是多少?思路:直接搜索:需要加很多剪枝才能过:1.首先你枚举时,应该枚举组数,而不是长度和,否则循环会很长。2.如果第一个木棍选完了,没找到合适的使它权值和为枚举的答案,就不可能有答案了。3.如果第i个木棍能组成ans,但其余的不能了,也不能有答案了。4.当长度小于ans原创 2017-02-20 00:35:30 · 363 阅读 · 0 评论 -
Codeforces Round #398 (Div. 2) -- C. Garland (dfs)
大体题意:给你一颗树,要求切掉两个边,使得剩下的三个子树权值相同,问切哪两个边? 没有输出-1思路:因为第一次删除肯定是删除一个完整子树。所以直接统计出每个点包含的完整子树的权值之和, 发现一个点的权值之和等于sum/3 的话,就把它切掉,直到切掉两个为止。注意:切掉之后点的权值之和会发生改变。其次 根节点不能被切。#include #define mr make原创 2017-02-19 00:35:02 · 457 阅读 · 0 评论 -
ICPCCamp2017 Day 5 E HDRF(DFS序列 + 线段树 + 离散化)
大体题意:给你一颗树,ri 为以当前结点为根的最小子树上的权值(单点),每个点有固定的权值vi,每个点的权值都不一样,每次你必须优先访问ri最小的,然后删掉,然后重新计算ri,求这个删除点的路径?思路:比赛中只想到了用dp 记录某个点的最小权值,然后一直跳下去,然后在回来更新dp这样肯定是超时的。因为回来更新太慢了。其实没必要用dp记录最小权值。直接给这棵树 进行dfs序列原创 2017-02-17 17:33:44 · 461 阅读 · 0 评论 -
POJ 2790 Consecutive ones (搜索 + 剪枝)
大体题意:给你一个n*m的0-1矩阵(n,m 思路:因为保证了答案唯一,所有正解只有一个,因此不合法的情况会有很多,因此我们可以考虑 搜索 + 剪枝的方案。矩阵只有0 和1 因此一个位置要么填0要么填1,这两种方式都考虑到剪枝就可以很轻松的过了!最先想到的肯定是枚举列,在枚举每一行检测是否合法!剪枝方法:如果这一列这一个位置是1的话,那么前面的一个位置也必须是1,否则就原创 2017-01-11 14:23:02 · 343 阅读 · 0 评论 -
UVA 1267 && LA 3902 Network (思路--树上的DFS)
大体题意:给你n 个节点的树,其中叶子节点是客户端,内部的节点是服务器!你需要把一些服务器变成VOD,使得每个客户端到最近VOD的距离不超过K,开始的时候,已经有了一个VOD ,标号是s(也是根节点),求在最少安装多少VOD使得上述描述成立!思路:本以为是一个dp,看了分析后,感觉想的太复杂了!先把无根树转成有根树,其实这已经是一个有根树了,把S作为根节点,然后dfs 求出每一个节原创 2016-12-06 15:43:53 · 376 阅读 · 0 评论 -
Codeforces Round #375 (Div. 2) -- E. One-Way Reform(dfs求欧拉回路)
大体题意:给你一个无向图,要求不能增边的,给边定向,使得图中入度等于出度的点尽可能多,输出结果,和边的方向!思路:赛后补得,请教了学长的思路(想了一天= =),感觉思路很巧妙:首先,无向图中奇度点的个数一定是偶数个(我才知道,感觉很神奇= = ~)那么我们可以把每个奇度的点与一个新的虚拟结点相连,这样最后我们会得到一个全都是偶数度数的无向图,那么必然存在一条欧拉回路,我们只需要原创 2016-10-07 00:25:58 · 697 阅读 · 0 评论 -
POJ 1077 Eight (正向BFS + 康托展开)
题意不说了 八数码问题:和上篇博客 HDU 1043 题目是一样的!但是做法上有些出入。HDU 时间限制比较长,而且是多组输入,所以要逆向bfs 进行打表处理。而POJ 1077 这个题目,时间是1S ,单组输入。因此输入一组 搜索一组即可。9个数的排列 判重用康托展开来做。但是这个队列要自己写,STL的queue 会超时。自己写的队列,在输出时 能很方原创 2017-01-24 16:25:24 · 757 阅读 · 0 评论 -
Codeforces Round #395 (Div. 2) -- C. Timofey and a tree(并查集+缩点)
大体题意:给你一棵树,要求找一个结点来作为根节点,使得所有的子树颜色都一样,整棵树不是子树,其余的是,存在的话输出那个点。思路:并查集+缩点。先把颜色一样的,并且连在一起的点缩成一个点。(类似连通块) 缩点后也一定是树。这样最后的形式就是 一个根结点连接着很多其他结点,这样枚举所有的边,统计一下缩点的度数。找出那个度数为总和-1的那个点就是答案,没有的话,就是NO咯。原创 2017-02-03 01:57:24 · 443 阅读 · 0 评论 -
HDU 6035 Colorful Tree (2017多校1 - dfs思路)
题意:给你一棵树, 树上的路权为 这条路上不同颜色的个数。 求所有路径的权值之和。思路:感觉好难。。其实这个题一遍dfs 就可以办了。可以反过来思考,对于每一种颜色求出 有多少条路 没有经过这个颜色。 最后用总路数减去即可。令sum[i] 表示 以i 颜色为根的子树总大小。siz[u]表示以u 为根的子树的大小。怎么找呢?假如我们枚举到u结点了。 对原创 2017-07-28 15:27:23 · 676 阅读 · 0 评论 -
蓝桥杯 历届试题 剪格子 (dfs回溯)
题意:把一个矩形格子分成两部分, 使得两部分和最小, 并且包含左上角的区域格子数最少?思路:一开始想的非常麻烦, 题意理解有些出入, 想去状态压缩去了, 想的非常麻烦。但这个题目 数据量很小。直接回溯就好了。从左上角格子开始, 不断的dfs搜索, 当前和为总和一半时 直接更新答案。#include #include #include using namespace原创 2017-05-16 20:08:09 · 528 阅读 · 0 评论 -
蓝桥杯 历届试题 网络寻路 (dfs)
题意:统计一棵树上有多少路 只走三次, 起点和终点可以相同,中间的不可以相同。思路:直接暴力枚举起点,dfs即可。#include #include #include #include #include #include #include #include #define Siz(x) (int)x.size()//#define get(x) (3.141592原创 2017-04-20 21:22:26 · 793 阅读 · 1 评论 -
Codeforces Round #360 (Div. 2) -- C. NP-Hard Problem (DFS二分图染色法)
C. NP-Hard Problemtime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputRecently, Pari and Arya did some research about NP原创 2016-07-02 09:30:21 · 1053 阅读 · 0 评论 -
UVA 1627 Team them up!(二分图染色+并查集+背包)
大体题意:告诉你n 个人的关系,要求所有的人分到两个组里,要求一个组里的人相互都认识。 每个人都必须要分到一个组里。 最后要求两个组的人员差值最小。最后输出两个组的人员。顺序随便输出即可。思路:当i 和j 不满足互相认识的话,就连接一条边,把能连通的点压到一个连通块里。这样会得到k 个连通分量。这样 就可以给每一个连通分量 进行二分图染色,当染色矛盾时,一定No solutio原创 2017-03-07 22:37:11 · 693 阅读 · 0 评论 -
团体程序设计天梯赛-练习集 -- L3-015. 球队“食物链”(状压+dfs 求哈密顿回路)
题意:告诉你n个球队,求一个字典序最小的食物链。头一次听说 足球食物链,相当精彩啊= =。思路:赛场上用普通的dfs 骗了一些分。但是没骗够。 因为有一个细节没挖到。就是A战胜B 不一定是A赢B 也可能是B输给A。可以把问题转换为求一个哈密顿回路:这是一个NP难问题。 可以用状态压缩 + dfs 的方法来做:相当于剪枝。令dp[i][st] 表示第i原创 2017-03-27 22:10:38 · 1284 阅读 · 2 评论 -
UVA 1640 The Counting Problem(统计题,找规律 + dfs)
大体题意:告诉你两个数a和b 问你a到b 区间内的数中,0,1,2,3,4,5,6,7,8,9每个数字出现了几次?思路:我们先写一个暴力的程序会找到一个规律:除了0以外的9个数字:9以内有1个 = num[1]99以内有20个 = num[2]999以内的有300个 = num[3]9999以内的有4000个 = num[4]。。依次类推:我们可以根原创 2017-03-10 20:16:30 · 492 阅读 · 0 评论 -
UVA 11882 Biggest Number (dfs搜索+bfs 剪枝)
大体题意:给你一个r*c的数字矩阵,要求从任意一个点开始走,只能上下左右走, 求走的过数连接起来最大是多少?思路:直接dfs每一个数字,在每一层dfs中,加上bfs 判断剩下的数连接起来能否大于当前的ans 不能的话 剪枝了。虽然思路是这样的,但昨天一直TLE, 或许姿势不对,第二天重写了一遍 就好很多了= =#include #include #include #inc原创 2017-02-25 10:36:48 · 562 阅读 · 0 评论 -
NYOJ 16 - 矩形嵌套(记忆化搜索)
思路:DAG模型!先建图,如果第i 个矩形 能套在 第j 个矩形里面的话,那么 就可以建立一个有向边,i->j,最后我们可以把这个问题转换为 求这个图中的最长路的长度!dfs记忆化搜索,和前几篇那个树形dp 有很大的相似之处,他们的思想是一样的, 就是先递归,在回溯的过程中状态转移!那一个题目 在递归过程中要防止产生环,这个题目显然不用,因为不可能存在一个环,(不可能间接的套了原创 2016-09-26 21:22:11 · 352 阅读 · 0 评论 -
LeetCode 133 Clone Graph (BFS || DFS)
大体题意:这个题目看了许久 才发现就是一道水题,他就是给你一个无向图,建图的方式都不用你管,他是用vector 保存的!在给你一个新的点,克隆出这个图来!第一次做leetcode,搞了半天。。思路:BFS或者DFS都行 只要能遍历一遍所有的点就好了!这个图有自环, 加个vis判断是否重复访问即可!因为是克隆图嘛,可以建立一个unordered_map mp;来一个原原创 2016-11-03 20:48:27 · 638 阅读 · 0 评论 -
POJ 3172 Scales (01背包 DFS)
ScalesTime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 2665 Accepted: 703DescriptionFarmer John has a balance for weighing the cows. He also has a set of N原创 2016-07-28 20:39:55 · 518 阅读 · 0 评论 -
Codeforces Round #358 (Div. 2) -- C. Alyona and the Tree (树上的DFS)
C. Alyona and the Treetime limit per test1 secondmemory limit per test256 megabytesinputstandard inputoutputstandard outputAlyona decided to go on a diet and we原创 2016-07-06 16:32:45 · 409 阅读 · 0 评论 -
Codeforces Beta Round #95 (Div. 2) -- D. Subway (DFS)
D. Subwaytime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputA subway scheme, classic for all Berland cities is represen原创 2016-07-17 11:42:41 · 452 阅读 · 0 评论 -
例题8-12 UVA - 12627 Erratic Expansion 奇怪的气球膨胀 (递归)
大体题意不说了 书上画的很清楚= = !思路:令f(k,i)表示第k 小时后,从上面数i 行 红气球的个数,那么答案就是 f(k,b) - f (k,a-1);通过看图不难发现:如果i >= pow2(k-1) 那么 f (k,i) = 2 * C(k-1) + f (k-1, i - pow2( k-1 ) );否则 f(k,i) = 2 * f (k-1,i);其中C原创 2016-07-05 11:22:57 · 399 阅读 · 0 评论 -
习题 6-14 UVA - 12118 Inspector's Dilemma 检察员的难题 (DFS 构造欧拉通路)
期末考试也快结束了,抽个空补个题做做 = =!!大体题意:给你一个无向图,任意两个顶点都是双连通的,给你e个 必须走的边,和每个边的权值t,问最少多少权值恰好完全经过这e个必须走的边。思路:最短恰好完全走过,那不就是一笔画吗,不就是欧拉通路吗,并且任意两个点都是双连通,肯定能构造出欧拉通路来。先用vector数组 在建立这张无向图,然后计算出度数是奇数的顶点个数ans,答原创 2016-07-01 00:31:39 · 472 阅读 · 0 评论 -
UESTC 491 Tricks in Bits (暴力回溯 + 剪枝)
Tricks in Bits Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others)Given Nunsigned 64-bit integers, you can bitwise NOT each or not. Then y原创 2016-06-03 21:32:47 · 482 阅读 · 0 评论 -
HDU 5612 Baby Ming and Matrix games(dfs暴力)
Baby Ming and Matrix gamesTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 1403 Accepted Submission(s): 382Problem DescriptionThes原创 2016-05-14 22:24:04 · 1350 阅读 · 0 评论 -
例题6-22 UVA 11853 Paintball 战场
思路:从上边界开始找,如果能够连通的到达下边界,则肯定不能从左边到右边,也就是无解!从上边界开始找就是dfs,每dfs一次就判断与左边界的交点,和右边界的交点,不断的取最小值即可!之所以不断的取靠南的方向,是因为从这个交点向上肯定过不去,因为是一路找过来的吗!教训:1。这个题不能从下边界开始找!2。注意不能return dfs;#includeusing namesp原创 2016-03-06 22:24:24 · 529 阅读 · 0 评论 -
Codeforces Round #197 (Div. 2) -- C. Xenia and Weights (DFS回溯)
C. Xenia and Weightstime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputXenia has a set of weights and pan scales. Each原创 2016-07-08 15:53:29 · 450 阅读 · 0 评论 -
Codeforces Round #357 (Div. 2) -- D. Gifts by the List(DFS)
D. Gifts by the Listtime limit per test1 secondmemory limit per test256 megabytesinputstandard inputoutputstandard outputSasha lives in a big happy family. At the Man's D原创 2016-07-09 16:18:50 · 578 阅读 · 0 评论 -
Gym 100962J Jimi Hendrix (DFS + 树形dp)
大体题意:给你一颗树,树上的边权是字母,给你一个长度为m 的字符串s,求出树上的两个点,使得这两个点之间的路 构成的字符串 s1,使得s是s1的子字符串(不一定连续),如果多解,任意给出两个节点,否则输出-1 -1?思路:比赛没有做出来,之后请教的同学,是一个树形dp。 思路很巧妙!首先我们任选一个节点作为树根节点(不妨选1号节点吧)我们可以给每一个节点设置为一个结构体,因为要原创 2016-09-26 00:36:07 · 692 阅读 · 0 评论 -
CCF 习题 201512-4 送货 (并查集 + DFS 找欧拉道路)
大体题意:要求从1号出发,一笔画经过所有的路,问是否有解,并打印字典序最小的解?思路:显然是无向图的欧拉道路!先判连通,直接用并查集了,不连通直接-1了连通的话,在看看每个点的度数,当奇点的个数不是0 并且不是2 肯定是-1如果是2 的话,1号结点是偶数度数的话也是-1否则我们就可以从1号结点直接dfs找路了!注意:不能再dfs之前就输出路径,这样是不对的原创 2016-09-08 09:39:53 · 1073 阅读 · 1 评论 -
UVALive 6590 Digraphs (DFS找环找通路)
大体题意:ddddddddddd大体题意:给你n个字符串(长度为2),表示这些字符串不准出现在矩阵中,让你构造一个尽可能大的字符矩阵,如果大小超过了20×20,那么就输出20×20的即可,否则输出你构造的矩阵?吐槽:真是服气了,忘记了回溯,改了一晚上= =!(好弱)思路:字符串的长度始终是2,很明显是一个图的题目,且出现的字符串是禁止使用的,因此我们可以给g[][]数组初始化-原创 2016-09-23 00:43:50 · 514 阅读 · 0 评论 -
UVALive 6585 Draughts (DFS回溯法 )
大体题意:给你一个10×10的棋盘,有白棋和黑棋,它们只能落在#上,白棋要想吃黑棋,必须相邻对角线有个黑棋,并且黑棋通用的对角线位置不能有棋,求最多吃多少?思路:直接回溯搜索即可!不用vis数组,改变棋盘,在回溯回来即可!详细见代码:#include #include #include #include #define ps push_back#define mr m原创 2016-09-23 01:43:19 · 396 阅读 · 0 评论 -
HDU 5878 I Count Two Three (DFS预处理 + 二分)
大体题意:给你一个数字n 找出一个大于n 的最小数字,满足它的素因子只有2,3,5,7组成!思路:直接利用set 进行dfs打表,set 中已经存在了就不用在dfs了,打完表直接二分查找即可!详细见代码:#include #include #include #include using namespace std;typedef long long ll;const原创 2016-09-17 20:19:13 · 462 阅读 · 0 评论 -
Codeforces Round #369 (Div. 2) -- D. Directed Roads (DFS找环)
大体题意:给你一个有向图,可能会有环,你的操作是反向一条路,求得使得图中没有环所有方案数?思路:假如图中没有环的话,有n条边,答案就是2^n如果有个m边的环,间接法考虑,总方案是2^m, 操作不改变的环的方法有2种, 什么也不动,和 每一个边都反向。所有破坏环有2^m - 2种操作!所以这个问题转换为 我们求出图中有几个环,求出操作数,在求剩下不成环的操作!详细见原创 2016-09-03 13:29:48 · 413 阅读 · 0 评论 -
POJ 3310 Caterpillar (BFS + DFS + 并查集)
CaterpillarTime Limit: 2000MS Memory Limit: 65536KTotal Submissions: 2289 Accepted: 1074DescriptionAn undirected graph is called a caterpillar if it is connected,原创 2016-08-19 00:33:39 · 655 阅读 · 0 评论 -
HDU 5438 Ponds (DFS + 并查集)
PondsTime Limit: 1500/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 3558 Accepted Submission(s): 1063Problem DescriptionBetty owns a lot of po原创 2016-08-01 11:06:16 · 588 阅读 · 0 评论 -
HDU 6196 happy happy happy (2017沈阳网赛 - 搜索 + dp + [黑科技。。。])
题意:儿子和爸爸选牌, 每一次每个人只能从最左边选择或者在最右边选择, 儿子的决策是 选左边 和 右边最大的那个位置, 如果一样大, 选择左边, 爸爸的决策是为了让儿子赢, 问你 如果儿子能赢 爸爸与儿子的最小分数差是多少, 如果无论如和 爸爸都赢儿子 输出The child will be unhappy...思路:很乱搞的一个题目。。我们先预处理出两个dp 来, dp1[i][原创 2017-09-14 14:26:14 · 758 阅读 · 0 评论