随笔分类 - dfs
摘要:题目链接 链接 翻译 给你一棵树,树上的每一个节点都带有权值。 让你统计这样的点 的个数,使得以 为根的时候,所有以 开始,以某个节点结束的路径中每个节点的权值 都是唯一的,即每个权值都只出现了一次。 称这样的 为 \(distinctive\ roo
阅读全文
摘要:题目链接 链接 翻译 让你给树上的每条边分配一个数字。要求这 个数的乘积要等于 分配的 的个数要尽可能少。 这个 质因数分解的时候,每个质因子的指数都是 ,且 是以告诉你它每个质因子的形式给出的。 要求树上任意两点之间的距离和
阅读全文
摘要:题目链接 点我呀 翻译 给你一个 的网格, 让你在上面放南极和北极磁铁, 但是这两种磁铁, 在你没有激活他们的时候, 是不会 互相吸引的, 只有在你选中其中一对南北极之后, 北极才会被南极吸引, 然后南极不动, 北极离它近一点 (当然, 只有他们俩 在同一行或者同一列的时
阅读全文
摘要:题目链接 点我呀 翻译 给你一棵树, 让你在这棵树上选择恰好k个点, 这k个点是发展工业的, 然后其余的n - k个点发展旅游业。 但是根节点(约定1号节点是根节点)例外, 它可以发展旅游业也可以发展工业(不过后面会发现这条件没啥用。。)。 假设x是你选出来的k个点中的一个, 对于所有的x, 你需要
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 题意 【题解】 设dis[v]表示v以上的点到达这个点的最大权值(肯定是它的祖先中的某个点到这个点) 类似于最大连续累加和 当往下走(x,y)这条边的时候,设其权值为w,以及到目前为止走过的最大权值和cur 如果cura[x]那么它以及它下面的所有节点都
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 给你一棵树 让你选择若干个修理点. 这些修理点被选中之后,节点i到1号节点之间的所有"坏路"都会被修好 问最少需要选择多少个点才能将所有的坏路修好 【题解】 以1为根节点建立一棵树 对于每一棵子树,如果里面有"坏路",必然要选择一个修理点,怎么选择呢?
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 有人转载官方号的动态。 又有其他人转载其他人转载的动态. 问你最长的一条转载动态的链有多长. 【题解】 用map把每个人的英文都转成小写的 然后从map中获取单词的标号 转换成图。 然后从根节点开始dfs即可 【代码】 cpp import java.i
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 【题解】 我们可以把原图的边都反向一下. 然后以每个休息点作为起点,进行dfs. 每次在扩展节点y的时候,要求这个点y必须只有一个出度,然后就能走多远就走多远就ok了。 会发现每个休息点占据的那些链都是唯一的,所以其他的休息点在进行dfs的时候,不会重复
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 让你把一个字符串的所有回文子串加起来。(当做数字加起来) 求他们的和。 【题解】 回文树。 从两个根节点分别遍历整棵回文树。 按照每个节点的定义。 得到每个节点对应的数字就好。 (节点之间都有联系,很容易快速搞出来到达下一个节点的数字是什么的。 有点卡内
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 把x..y这条路径上的点标记一下。 然后从x开始dfs,要求不能走到那些标记过的点上。记录节点个数为cnt1(包括x) 然后从y开始dfs,也要求不能走到那些标记过的点上。记录节点个数为cnt2(包括y) 答案就为n (n 1)
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 dfs序 进入的位置设为1出去的设为 1则某个点进去的位置的dfs序的前缀和就是这个点到根节点的路径数。 (可以巧妙的把那些分叉路径去掉。 修改成公路后。就把下面的那个点(深度高的)的进入和出去的值都设置为0 用线段树维护区间和
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 考虑,为什么一个连通块里面的空格没有变成一个矩形? 如果不是形成矩形的话。 肯定是因为某个2x2的单张方形里面。 只有一个角是墙。其他角都是空的正方形。 举一些例子。 可以看到这个连通块不是长方形。 就是因为有 和 如果我们把这
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 对m个串建立一棵字典树。 然后对主串。 尝试从第一个位置开始.在字典树中尝试匹配 如果匹配到了位置i 就再从位置i+1开始尝试匹配 (这时又重新从根节点开始重新匹配 每次匹配最多只要往下走50步。 写个递归的过程就好。 【代码】
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 找到任意一个环。 然后枚举删掉其中的某一条边即可。 (因为肯定要删掉这个环的,那么方法自然就是删掉其中的某一条边 (其它环,如果都包括这条边,那么就可以,否则,某个环不包括那也没办法,自然就无解了。 这样枚举的边的数目最多是50
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 写个dfs看看是不是每个节点都有3个叶子节点就可以了。 【代码】 cpp include using namespace std; const int N = 1e3; int n; vector g[N+10]; bool o
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 可以先确定当前这棵子树的dfs序的范围。 然后第一个元素肯定是这棵子树的根节点。 那么只要在这棵子树的范围里面枚举节点。 看看有没有下一个bfs序的节点即可。 如果有的话,那么就说明这个根节点有多个子树。 则加入到它的儿子里面去
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 写两个dfs模拟就好。 注意每12个数字输出一个换行。。 【代码】 cpp / 1.Shoud it use long long ? 2.Have you ever test several sample(at least th
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 给你一个n m的地图。 每个地图为0的时候可以安全走过,且走过后变成1. (一定要离开之后才会变成1) 而为1的则走过之后会掉入下一层。 你一开始在初始位置(x1,y1); 且你想到达位置(x2,y2); 且要求到达(x2,y2)并且掉进下一层。 保证(
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 预处理出某个方向的左边、前边、右边是哪个方向就好了。 然后就是普通的bfs了。 hash存到某个点,走到这里的方向的最小距离。 dfs输出路径。 【代码】 cpp include using namespace std; //[
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 每个图案里面的“洞”的个数都是不同的。 则可以根据这个判别每个图像是什么。 先用dfs确定轮廓之后。 再从每个白点出发dfs,遇到的黑点且没有到达过边界,那么它就是所遇到的黑点里面的“洞”; 计算每个轮廓有多少个"洞"就好 【代
阅读全文