搜索—DFS
文章平均质量分 75
Ezereal
这个作者很懒,什么都没留下…
展开
-
hdu 5802 Windows 10 (贪心+dfs)
题目大意调节音量s到t,上升音量每秒只能上升1,下降音量每秒为2*x,x为上一次下降的音量,如果下降时休息或者上升音量则x置为1,音量最低为0思路就是贪心的去选,每次下降到终点上的最近一点,或者终点下的一点,取得一个最小值就好。#include #include #include #include #include #include #include #inclu原创 2016-08-05 09:40:37 · 662 阅读 · 0 评论 -
hdu2196 Computer (树形dp+搜索)
题意:一个有N个结点的树,给你相邻两个结点的距离,问你对于第i个结点,树中离i最远的结点的距离是多少。题解:可以通过两次树形DP求解。dp[i][3],i表示为在哪里结点,0表示子树中的最长距离,1表示子树中的次长距离,2表示父树的最长距离。如果结点a本身就是父结点b最长子树距离上的结点,那么结点a最长父树结点就是结点b的次长子树距离或者结点b的最长父树距离。代码:#include转载 2016-08-08 11:11:29 · 239 阅读 · 0 评论 -
poj 3162 Walking Race (dfs+尺取法单调队列)★
题意:对一棵树,求出从每个结点出发能到走的最长距离(每个结点最多只能经过一次),将这些距离按排成一个数组得到d[1],d[2],d[3]……d[n] ,在数列的d中求一个最长的区间,使得区间中的最大值与最小值的差不超过m。分析:用2次dfs能求出树的直径,对于树中任意结点,到树的直径的2个端点的距离的较大者即为最长距离。得到数组d后,用2个单调队列分别维护最大与最小值,扫描d数组,同时更新答案原创 2016-08-08 15:03:11 · 927 阅读 · 0 评论 -
E. Ants in Leaves
题意: 有一颗树,树的每个叶子上都有一个蚂蚁,蚂蚁往树根处爬。其中每个结点(根节点除外)最多只能出现一只蚂蚁。问最少经过多长时间全部的蚂蚁才能都到达根节点 思路: 由于只有根节点可以同时有多只蚂蚁,so 我们先将根节点的子节点拆除。这样就将一棵树转化为森林,显然森林的其中的一颗耗时最长的树就是最后的答案。 所以我们的问题就是如何计算每棵树最长的耗时。 对于其中的一棵树, 先原创 2016-08-29 20:32:06 · 529 阅读 · 0 评论 -
2016 大连网络赛 HDU 5877 Weak Pair (DFS + 树状数组 + 离散化)
题意:给定一颗树,然后对于每一个节点,找到它的任何一个祖先u,如果num[u] * num[v] 题解:dfs搜索一遍树结构,树状数组记录路径上的数信息,由于数太大,所以需要离散化一下#include #include #include #include #include #include #include #include #include #include #inc原创 2016-09-11 19:36:55 · 381 阅读 · 0 评论 -
VK Cup 2016 - Qualification Round 2 C. Road Improvement dfs
题意给你一棵树,n点n-1条边,现在这些边都不存在,你要修起来。你可以选择一条边修理,如果这个边的两边的城市都没有在修理其他边的话。每次修理需要一天的时间。问你最少多少天可以修完,并且把方案输出。题解:直接dfs就好了,我们记录一个上一个边传过来的时间和这条边修理的时间就好了保证不重复就行了。#include #include #in原创 2016-09-13 09:07:01 · 362 阅读 · 0 评论 -
Manthan, Codefest 16(G. Yash And Trees(dfs序+线段树))★ ★ ★
转载自:http://blog.csdn.net/weizhuwyzc000/article/details/50777092题意:给你一棵树, 根结点为1, q组操作, 每组操作有两种, 一种是对一个结点的所有子树结点的值全部+1, 另一种是查询一个结点的子树结点上值%m的余数为素数的个数。思路:对于第一个操作, 我们可以想到用dfs序给树重新标号, 使得一个结点的子树结点为相邻转载 2016-09-02 22:19:00 · 358 阅读 · 0 评论 -
HDU 1814 Peaceful Commission (2-SAT) O(nm)做法
题意:找出字典序最小的解分析:直接暴力枚举DFS,首先将所有的点都置为为染色,然后我们从第一个点开始DFS染色,我们先尝试将i染 成红色(答案中的颜色),将~i染成蓝色,然后dfs i的所有后继并染色,如果对于后继j没有染色,那么将j然 后为红色,~j染成蓝色。如果后继j已经被染成蓝色,则说明不能选则i,如果j已经染成红色,则说明可以转载 2016-09-17 09:52:26 · 371 阅读 · 0 评论 -
Educational Codeforces Round 6 E. New Year Tree(DFS序+线段树)
题意:给你一棵树,编号1~n,告诉你根结点是1。 每次有两个操作:1,将以v为根的子树的结点全部染成颜色c2,问以v为根的紫书的结点的颜色种类。思路:如果这是一条线段的话, 那么这就是线段树的区间更新问题,而现在是一棵树。因为告诉了根结点是1, 那么这棵树的任意一个结点的子树就是确定的, 所以我们可以用DFS的先序遍历,将所有结点重新编号,因为先序遍历的话, 任意一原创 2016-08-26 15:23:26 · 434 阅读 · 0 评论 -
hdu 1307 N-Credible Mazes
先说一下题意,就是给你n维起始点和终点的坐标,然后后面给出一系列的点,每一行表示这两个点之间有通路,最后让你判断一下能否从起点出发走到终点。由于最多不超过10维,那么我们把每个点的坐标转化为一个整数,然后建邻接表,这样dfs就可以了(值得注意的是我们用set来判重,当然你也可以用数组什么的)#include#include#include#include#include#原创 2016-04-15 15:40:51 · 374 阅读 · 0 评论 -
hdu 5652 India and China Origins (★)
题意:上边是中国,下边是印度,黑点的部分不可以走,下面的矩阵1代表黑点不能走,然后给了Q,每一次将一个点变成黑点,即不能走,问最少多少次就可以完成分析:这是一个连通性的问题。你会发现如果将所有操作逆序来看的话就很容易用并查集来处理了。 首先把所有的山峰都加到图中,然后逆序处理每个操作:对某次操作,在图中删除该位置的山峰,然后判断两个点是否联通,一旦联通就得到了结果。 这里需要对原创 2016-03-27 20:30:48 · 804 阅读 · 0 评论 -
hdu 5546 Ancient Go(★)
题意: 有两个人在一个9*9的棋盘里下棋,A 是的棋子为x , B为 o ,“.” 的意思为空。 问 A的下一个 能否将 B 的棋子杀死, (跟围棋差不多)。解题大意: dfs 判联通块的周围是否只有 一个 ‘ . ’. #include#include#includeusing namespace std;char ma[10][10];int vis[10][10]原创 2016-03-12 20:11:53 · 497 阅读 · 0 评论 -
POJ 3009 Curling 2.0
题意:给定一个m*n的网格,在这些网格上一些地方有障碍物,给定起点与终点的位置,当石头从起点开始走,撞上障碍才会转弯,否则会一直沿着来时的方向继续前进。撞到障碍后停在障碍前的位置,障碍消失。然后石头可以选择四个方向(相邻处无障碍的方向)前进,问至少需要停多少次才能从起点到达终点。不能到达或者多余10步后游戏失败。如果能到达输出最少的步数,否则输出-1.题解:一道比较简单的DFS,刚交一发完美过原创 2015-08-17 15:53:29 · 454 阅读 · 0 评论 -
hdu 1181 变形课(恶心的输入)
呃......变形课上Harry碰到了一点小麻烦,因为他并不像Hermione那样能够记住所有的咒语而随意的将一个棒球变成刺猬什么的,但是他发现了变形咒语的一个统一规律:如果咒语是以a开头b结尾的一个单词,那么它的作用就恰好是使A物体变成B物体. Harry已经将他所会的所有咒语都列成了一个表,他想让你帮忙计算一下他是否能完成老师的作业,将一个B(ball)变成一个M(Mouse),你知道,如原创 2015-10-14 14:55:39 · 457 阅读 · 0 评论 -
hdu 1983 Kaitou Kid - The Phantom Thief (2)
题意:破解字迷之后,你得知Kid将会在展览开始后T分钟内盗取至少一颗宝石,并离开展馆。整个展馆呈矩形分布,划分为N*M个区域,有唯一的入口和出口(不能从出口进入,同样不能从入口出去)。由某个区域可直接移动至相邻四个区域中的一个,且最快需要一分钟。假设Kid进入放有宝石的区域即可盗取宝石,无需耗时。问至少要封锁几个区域(可以封锁放有宝石的区域,但不能封锁入口和出口)才能保证Kid无法完成任务原创 2015-10-15 21:28:20 · 586 阅读 · 0 评论 -
HDU 1198 Farm Irrigation
题意:有如上图11种土地块,块中的绿色线条为土地块中修好的水渠,现在一片土地由上述的各种土地块组成,需要浇水,问需要打多少口井。题解:联通块类型题,关键是预处理好给定的几个图形,按照4位二进制保存#include #include #include #include #include #include #include #include #include #include原创 2015-12-12 16:03:40 · 412 阅读 · 0 评论 -
POJ 1321 棋盘问题(寒假刷题之路)
在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别。要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放方案C。Input输入含有多组测试数据。 每组数据的第一行是两个正整数,n k,用一个空格隔开,表示了将在一个n*n的矩阵内描述棋盘,以及摆放棋子的数目。 n 当为-1原创 2016-02-04 13:24:47 · 443 阅读 · 0 评论 -
CodeForce 377 A mazes (逆向思维)
题意:给一个n*m的矩阵,#代表墙,.代表通路,给一个k值,代表需要你将矩阵中k个通路改为X,但是要保证剩下的点依然联通,然后输出改变有的矩阵。分析:因为原图是连通的,我们队原图进行递归深搜,从深搜树的底部开始往上删除结点,直至k等于0,这样既达到了删除k个节点也保证了剩余的节点连续。#include #include #include #include #原创 2016-03-12 17:50:14 · 509 阅读 · 0 评论 -
Codeforces 429 A. Xor-tree
题目意思:给一颗n个节点的树,每个节点有一个值要么是0要么是1,改变某个节点的值时,它的儿子不变,它儿子的儿子翻转,它儿子的儿子的儿子不变,如此类推。给定各个节点的目标值,求最少的翻转次数,使得达到要求。题解思路:先建树,然后从根节点开始dfs,维护一个从根传过来的奇数层改变的次数,从根传过来的偶数层改变的次数,根据当前节点所在层的奇偶性以及原始值和目标值的差异,判断该节点原创 2016-03-12 18:27:18 · 919 阅读 · 0 评论 -
codeforces 369C Valera and Elections
题目描述n个节点和n - 1条双向边组成了一棵树。这些边分为两种,一种类型为1,一种类型为2,类型为2的边需要维修。当我们选中一个节点x时,节点x到节点1路径上的所有类型为2的边都会被维修。我们需要找到n个节点的一个子集,满足 子集中个数最少,并且所有类型为2的边都得到维修分析由于输入只是两点相连,并没有说明是父子关系,所以首先搜索处理出树的结构,标记需要处理的节点原创 2016-03-12 19:08:26 · 711 阅读 · 0 评论 -
Codeforces 707D Persistent Bookcase(bitset+dfs)★
题意:有一个有n行m列的书架,初始为空,现有q次操作,要求输出每次操作完之后书架上共有几本书。 操作分为4种: 1.在第i行第j列放入一本书。如果在操作之前第i行第j列已经有书了,那么忽略此次操作。 2.将第i行第j列的书拿走。如果在操作之前第i行第j列没有书,那么忽略此次操作。 3.将原创 2016-09-06 21:58:36 · 1310 阅读 · 0 评论