摘要: 题解都说了,当统计\(u\)为根节点的时候,答案就是满足以下条件的\(i\)的数量:\(d_i≥g_i\)且\(d_{fa_i}<g_{fa_i}\),设这个数量为\(ans\)。以下严格证明 首先对于满足这个条件的\(i\),其子树的叶子节点显然最多只有一个有农夫(否则就放多了) 我们考虑任意一个 阅读全文
posted @ 2024-07-17 23:01 最爱丁珰 阅读(2) 评论(0) 推荐(0) 编辑
摘要: 这道题目卡常卡了两个半小时仍然没有卡过。。。等进队了让队友帮忙卡一下吧 主要想一下思路 最主要的就是在计算路径长度的时候,假设当前递归到了点\(i\),那么从点\(i\)出发的两条路径合并在一起,如果第一条边的颜色相同的话就会重复计算,为了解决这个问题,我们只用对每个点进行排序,将相同颜色的点放在一 阅读全文
posted @ 2024-07-17 21:08 最爱丁珰 阅读(1) 评论(0) 推荐(0) 编辑
摘要: 赛时用的点分治,好像还可以用虚树,熟悉虚树之后回来做这道题目 但是有个与dfs相关的遍历算法,见这篇文章 这个\(a\)表示的就是对于当前遍历到的节点\(x\),其子节点有多少个满足题目所求的路径(而且在回溯的时候更新答案),\(b\)表示的就是对于当前遍历到的节点\(x\),已经遍历过的节点有多少 阅读全文
posted @ 2024-07-17 17:48 最爱丁珰 阅读(2) 评论(0) 推荐(0) 编辑
摘要: 这个看官方题解就好了,解释一下官方题解 首先一个很大的前提(也比较显然),就是为了达到最优的情况,我们只会让一个史莱姆一直吃,而不会让两个史莱姆都吃,最后再让其中一个史莱姆将另一个史莱姆吃掉 这一个区间指的是,只有这个区间的史莱姆进行互相吃,相当于忽略了区间外的史莱姆 剩下的都挺清楚了 阅读全文
posted @ 2024-07-17 17:22 最爱丁珰 阅读(2) 评论(0) 推荐(0) 编辑
摘要: 显然当\(l\)和\(r\)定了之后,元素顺序不影响答案,所以我们先将\([l,r]\)排序来考虑 从最特殊的元素开始考虑,大于\(0\)的第一个元素是\(1\),所以考虑\(1\),然后就可以发现官方题解的做法了 阅读全文
posted @ 2024-07-17 17:11 最爱丁珰 阅读(3) 评论(0) 推荐(0) 编辑
摘要: 官方题解的证明很严谨,可以看一下 也可以从上下界的角度考虑,每两段\(1\)中间的\(0\)的总和显然是下界(我们每次操作最多只能让这种\(0\)减少一个,而最终的序列要求没有\(0\));考虑构造下界方案,每次对最后一个\(1\)进行操作即可 阅读全文
posted @ 2024-07-17 16:59 最爱丁珰 阅读(2) 评论(0) 推荐(0) 编辑
摘要: 看官方解答吧,挺清楚的 我想到了表示\(1\) ~ \(k-1\)和\(k+1\) ~ \(n\)的,也想到了像多重背包二进制拆分一样拆分,也想到了添加\(k+1\),但是没有想到添加\(k+1+2^i\),这就导致没办法凑完 添加\(k+1\)是在表示\(k+1\) ~ \(n\)中且第\(i\) 阅读全文
posted @ 2024-07-17 13:49 最爱丁珰 阅读(1) 评论(0) 推荐(0) 编辑
摘要: 想到了上界的,但确实构造不来 构造方法就看官方题解就好了,我们单个单个考虑就很困难,所以直接分成两组,一组的最小值大于另一组的最大值就好了 阅读全文
posted @ 2024-07-17 12:52 最爱丁珰 阅读(2) 评论(0) 推荐(0) 编辑
摘要: 可以纯模拟,但是也可以用hash,而且细节更少,容易写对 见这篇文章 阅读全文
posted @ 2024-07-17 10:54 最爱丁珰 阅读(1) 评论(0) 推荐(0) 编辑