不要因为别人的过错惩罚自己

总结一下这几天做的题。

啦啦啦啦啦啦啦啦啦啦啦~(A5)

啦啦~ 啦啦~~~~~~~~~(Eb6)~(F6)

下面好像都只有 1900。

AT_abc267_f

让我们对于每个点找到其距离最远的点,这样就可以回答所有疑问。

暴力找肯定不行,我们猜测每个点的目标点去重后不会很多。

直径的性质:每个点在树上距离最远的点事直径的两个端点之一。

于是我们直接对于直径的端点为根 dfs 即可,把询问挂在树上,每次只需回答 \(k\) 级祖先即可。

不需要倍增,由于 dfn,我们直接记录当前 \(w_i\) 表示 \(dep_x=i\)\(x\) 即可。

AT_abc344_f

当时没场切。可能没有看题。

金币太大,无法进入状态。我们考虑贪心:每次只买金币使得恰好能走到这里。

考虑延迟计算,即我们可以将在 \((i,j)\) 买金币变成:

  • 对于所有要经过 \((i, j)\) 的路径 \((1,1)\to (x,y)\),可以在 \((i,j)\to (x,y)\) 的任何点上买 \(c_{i,j}\) 的金币。

所以我们只需要把当前路径上最大的 \(c_{i,j}\) 坐标记入状态即可。

注意此处我们的 dp 要记录 2 个东西,一个是时间,一个是当前金币。(很多时候是不能记录 2 个的,但是此题时间严格优,金币只是辅助状态)

时间复杂度 4 次方。有一个类似的题,记录最大的 \(w\) 即可,然后转移套上 dijkstra。讨论区里面应该有链接。

AT_agc005_c

独立做出来的,主要是 T1 的直径太深刻了。

从叶子构造不太好做。

考虑极值,看看最大的 \(a_i\)?如何构造?

想到先把直径拉出来(一条链)。然后把所有链上的 \(a_i\) 减去,构造剩下的 \(a_i\)

然后做完了。半个小时吧。

AT_arc058_b

人机题。

容斥没什么思路,主要是不知道容斥钦定什么。

考虑划分路径,直接在第 \(b\) 列枚举是从哪一行过来的就行了。把两边直接合并即可。

方案数是经典的组合数。


今天上午什么都没做。太困了。

AT_agc049_c

很一眼的东西就是你先把所有 \(b_i<a_i\) 的区间全部消掉,然后把剩下消不掉的点进行操作。

两种策略:

  1. 召唤一个 \(x+1\) 的人机把你噶了。

  2. 把自己的 \(b_i\) 减少。使之刚好覆盖 \([1,a_i]\)

容易发现 2 操作修改的是一段前缀。1 操作是单点,就做完了。

P5361

看到第二问无向图最大独立集 NP 完全问题害怕了 qwq。

直接 SA!

考虑构造一个不是最大的独立集:每次把度数最小的点删掉,直到所有点独立。

再看第一问。答案不一定有单调性哦。但是几个状态之间的差别一定是连续的,所以还是依次删掉度数小的点。找最大的答案。

P4006

本来只有 40 分的,乱搞过了,好像还被 zyr hack 了?

他自己也没了。。。

dp 和贪心 dfs 很显然。考虑确定根。

对于 \(in_x=1\)\(x\) 我们直接取最小的作为根并且把其出度点设为右儿子即可。

否则是 \(in_x=2\),我们肯定希望这个最小的 \(x\) 是第一个点。

记相邻点为 \(l,r\),其构成子树为 \(A,B\)

先以 \(x\) 为根算出 \(A,B\) 里面的最小的第一个值,取这个值大的一边作为根节点的选择范围。

然后随机选点。但是我们可以先把 \(l/r\) 这种点选上先跑一遍。

这算法能过所有数据我还是很震惊的,毕竟随机选点都没写就过了。

posted @ 2024-10-28 23:49  LCat90  阅读(10)  评论(0编辑  收藏  举报