
深度优先搜索
文章平均质量分 76
johsnows
正在静下心来学算法的acmer
展开
-
2020kickstart d Beauty of tree
题意:a,b两个人, 分别在一棵节点数为n的有根树上,随机选择一个点,每x(y)个点(往根的方向)对一个节点染色,直到到达或超过根节点。问这棵树被染色的点的期望值。解题思路:首先有N*N个情况,每种情况下这棵树被染色的数目之和除以N*N就是要求的期望值所以问题就算如何统计每种情况染色数目之和暴力枚举每种情况肯定是不行的,可以换一个思路来想,去求每个点被选取后会染色多少个点。在一棵树上,假设p-x就是p下一步会染的点,那么r[p]=r[p-x]+1,只需要一遍dfs指定向下遍历就.原创 2020-07-16 18:48:54 · 215 阅读 · 0 评论 -
codeforces 707 D Persistent Bookcase(dfs+bitset)
题意:对一个n*m的01矩阵进行操作。第一种操作是将x行y列的数置1.第二种操作是将x行y列的数置0.第三种操作是将x行的数取反。第四种操作是将矩阵回到第x次操作后的矩阵。解题思路:说是可持久化数据结构,我最近又刚刚学了主席树,就真的被骗去写可持久化了,然后还没有写出来QAQ。其实这个题目由于n,m小于1000,本身操作消耗的时间很短,所以不需要可持原创 2017-07-20 16:26:52 · 285 阅读 · 0 评论 -
uva 12507 Kingdoms(dfs+最小生成树)
题意:n(4-16)个点,每个点有权值,m条带权值的边,问在边权最多花费k的情况下,能让1这个点连通的点的权值加和最大为多少。解题思路:做题要看数据范围,n个点直接dfs枚举是否取2到n种的每个点,1肯定要取,然后用最小生成树把枚举出来的点连接,看是否能建成生成树,然后再看生成树的权值是否小于等于k,满足的情况算一下点权和,更新一下答案,就做完了。代码:#inc原创 2017-06-09 20:36:58 · 479 阅读 · 0 评论 -
poj 3107 Godfather(树的重心)
dfs求树的重心。然后记得用前向星,用vector会t。然后就是又是惯例的poj过量测试,数组开大一点。代码:#include #include #include #include #define ps push_backusing namespace std;const int maxn=5e5+5;//vectoredg[maxn];st原创 2017-06-16 08:57:32 · 324 阅读 · 0 评论 -
hdu 5544 Ba Gua Zhen(线性基+dfs)
题意:一个无向图,每条边有值,找出无向图中所有的环的异或和,问这些值能异或出来的最大值。解题思路:去年的做的比赛里的题,今年才补上。找环用dfs跑一遍图就可以找出来了,然后求最大的异或和,这是线性基的应用,用高消对求出来的异或和跑一下求出线性基,然后就是线性基求异或最大值的套路了。思路是蛮清晰但是还是很容易错,用来存环的异或和的数组和边数m开的一样大了结果超了,但是hd原创 2017-04-23 20:48:36 · 986 阅读 · 0 评论 -
zoj 3602 Count the Trees (dfs+哈希)
题意:给出两棵树,问这两棵树有多少对子树,分别来自两棵树且结构相同。思路:一开始想着去给没课字符编号,然后map统计,但是没想出编号的办法。编号的话我们可以根据二叉树每个节点的两个儿子来编号,pairpair中两个值分别表示出了两个左右子树的结构,这棵树的结构也就表示出来了,这种做法倒是加深了对树的理解,已经如何构造编号也是深受启发。然后对两颗树分别dfs就可以了。原创 2017-05-05 15:05:35 · 482 阅读 · 0 评论 -
pat L2-013. 红色警报 (dfs)
L2-013. 红色警报时间限制400 ms内存限制65536 kB代码长度限制8000 B判题程序Standard作者陈越战争中保持各个城市间的连通性非常重要。本题要求你编写一个报警程序,当失去一个城市导致国家被分裂为多个无法连通的区域时,就发出红色警报。注意:若该国本来就不完全连通,是分裂的k个区域,而失去一个城市并不改变其他城市之间的连通性原创 2017-03-14 11:17:44 · 752 阅读 · 0 评论 -
pat L2-016. 愿天下有情人都是失散多年的兄妹(dfs)
题意:共同祖先在五代值内不能通婚。给你n个人的性别和父母。然后由k次询问,问你两个人能否通婚。解题思路:用vetor记录边,然后dfs的时候递归五次判断有没有相同的祖先就行。这个题的tricks是,要把父母的性别也顺带记下来,会出现一些父母的信息没有单独给出,然后询问 里也闻到了的数据。代码:#include using namespace std;co原创 2017-03-14 10:54:47 · 2145 阅读 · 1 评论 -
pat 家庭房产 (dfs)
5-11 家庭房产 (25分)给定每个人的家庭成员和其自己名下的房产,请你统计出每个家庭的人口数、人均房产面积及房产套数。输入格式:输入第一行给出一个正整数NN(\le 1000≤1000),随后NN行,每行按下列格式给出一个人的房产:编号 父 母 k 孩子1 ... 孩子k 房产套数 总面积其中编号是每个人独有的一个4位数的编号;父和母分别是该编原创 2017-03-18 22:00:38 · 2259 阅读 · 0 评论 -
POJ 3009 Curling 2.0(深度优先搜索+剪枝)
题意:给一个图,由障碍和空地组成,一块石头可以在上面往一个方向滑动,只能沿着x,y方向滑动,并且那个方向上第一个地方不能是障碍物,石头滑动直到碰到障碍停止,并且消掉障碍物,或者滑出边界,这时候算游戏失败,给出起点和终点,问石头能否在十步之内到达终点,能的话最小步数是多少.思路:题目很简单,只需要模拟dfs就可以,注意走过的点可以重新走,因为图是在变化的,建图的时候可以全原创 2016-08-22 11:37:31 · 506 阅读 · 0 评论 -
codeforces 767 c Garland(dfs)
C. Garlandtime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputOnce at New Year Dima had a dream in which he was presente原创 2017-02-19 19:53:55 · 1156 阅读 · 0 评论 -
hdu 5925 counts (二维离散化+dfs)
题意:在一个R*C的地图上,有n个障碍点,问最终有多少个联通块,R,C的范围是1到1e9结题思路:第一次将一个二维地图离散化.考虑x这一维的离散化,我们将障碍物之间那块长度压缩成一个点,用vetor记录下来,每个障碍物也记录下来,y这一维相同,这样我们就得到了一个最大是400*400的点,那么我们就用普通的dfs求联通块的办法去做就行了.代码:#incl原创 2017-02-16 20:13:03 · 446 阅读 · 0 评论 -
hdu 5927 Auxiliary Set (dfs)
题意;一棵大小为n的有根树,根为1,有q次查询,每次查询给定一个set,set里的点为不重要点,不在set里的点为重要点,问树上有多少个点满足一下两个条件1.是重要的点.2.是两个重要的点的最近公共祖先解题思路:这题的结题方法比较巧.考虑一个不是重要的点能满足条件,需要它有两个子树存在重要的点,如果我们从不是重要的点里深度最深的点开始考虑,如果这个点有两个子树,那么就一原创 2017-02-16 20:03:19 · 412 阅读 · 0 评论