摘要: 原题链接 题解 对于硬币数变为零的点,由于既不能穿越,也不能选取,所以等于删掉了 所以操作就变成了,选取一个点,删除以其为根的树的所有叶子节点 先将树退化成链,考虑链上操作的情况,如果选取链上端点,总节点数只减一,否则减二 因此对于树上任意一条链,每次选取会导致要么减一要么减二,因此只考虑最长链的长 阅读全文
posted @ 2024-07-31 15:46 纯粹的 阅读(10) 评论(0) 推荐(0)
摘要: 原题链接 题解 朴素做法: 每次询问,二分最小边,然后bfs遍历查看是否能到达,时间复杂度 \(O(q\cdot logn\cdot m )\) 优化: 如果答案里的最小边是 \(k\) ,那么代表所有边权不小于 \(k\) 的边都可以使用,因此可以直接从大到小加入边,直至起点与终点连接 时间复杂度 阅读全文
posted @ 2024-07-31 14:02 纯粹的 阅读(21) 评论(0) 推荐(0)
摘要: 原题链接 题解 易得当区间异或和不为完全平方数的时候合法 朴素做法: 遍历所有区间,看看异或和是不是完全平方数 优化: 异或是可以交换运算顺序的,如果区间 \([l,r]\) 异或和为完全平方数,那么代表 \(pre[r] \oplus pre[l-1]==k\) 其中k为完全平方数 也就是说,\( 阅读全文
posted @ 2024-07-31 13:11 纯粹的 阅读(13) 评论(0) 推荐(0)
摘要: 原题链接 题解 如果一个 \(k\) ,其前面没有出现过 \(k-1\) ,那么回合数+1,我们令这样的数叫做断点 因此交换两个数 \(l,r\) 不会影响 \([1,l-1],[r+1,n]\) 内的断点 code #include<bits/stdc++.h> #define ll long l 阅读全文
posted @ 2024-07-31 12:24 纯粹的 阅读(43) 评论(0) 推荐(0)
摘要: 原题链接 题解 设 \(p\) 为指向当前无法到达的最小值的指针,初始为1 1.如果有面值为1的硬币,那么p变成2,否则答案为零 如果有面值为1的硬币,那么p变成2 如果有面值为2的硬币,那么p变成3 以此类推,如果此时p为n,且有一枚面值不大于n的硬币k,那么p此时变成 n+k 因为p为n的意思是 阅读全文
posted @ 2024-07-31 12:06 纯粹的 阅读(45) 评论(0) 推荐(0)