250421 模拟赛

Atcoder 神题赛!(顺序打乱)

T1

给一棵树,给点赋值 \(0\)\(1\),给边标 AND 或 OR ,对于一种标记方案,每次选择一条边合并两个节点,问有多少种标记方案最终得到一个 \(1\) 节点。

一开始想的是把所有 AND 的边断开,形成的每一个连通块都至少有一个 \(1\),然后掏出了容斥原理,结果过不了样例。百思不得其解,然后换了一个直接算的做法,然后发现跟之前测样例的结果都一样。然后不知道为什么用 \(2^{2n-1}\) 减去另一个结果是对的。后来看了题解发现题解想的是把 OR 的边断开,然后用全部方案减去全是 \(0\) 的方案。

T4

给一棵树,边有边权,新建完全图,两点间边权为原树上两点路径长度。求新图上最长 Hamilton 路径(经过每个节点恰好一次的路径)长度。

显然是转换成 \(1\sim n\) 的排列,相邻两点之间的路径长度和。在厕所灵光一闪改成了 \(2\times dep_{a_i}-dep_x-dep_y-dis_{x,y}\) 这种怪东西。想了半天感觉没有什么想法。还想到可能是先找回路然后再减去一条最小的路径,但是当时感觉太假排除了。然后正解是先找一条最大的回路,然后发现所有路径都经过重心,然后减去重心相连最小的边,或者有两个重心时减去两重心相连的边。

分析一下就是先把找路径转换成确认每一条边的贡献,然后发现在最大的情况中这条边被经过的次数是 \(min(siz_y,n-siz_y)\times 2\) 的。然后再分析一下,发现这样选出来每一条路径都是经过重心的,要找最小的就是重心连接最小的边或者两个重心之间的边。
双倍经验一下。

T6

给一个 \(01\)\(s\),每次操作可以翻转一个字符,要求每次操作结束不能有 \(3\) 个或者以上连续一样的字符,问最少多少次操作可以到达目标字符串 \(t\)\(n\le 5000\)

因为之前见到一个用另一个字符串刻画序列的方法所以一直想着用同样的方法来做,但是没有想出来。看题解感觉这题的思路偏猎奇,写的也是非常的好,一眼就看懂了。就是这思路有点太猎奇了。


订题这会快困死了。

posted @ 2025-04-21 21:29  baiguifan  阅读(37)  评论(0)    收藏  举报