2024/12/26

「省选联考 2023」城市建造

考虑选出 \(t\) 个点,每个连通块选出恰好一个点。

注意到在同一个点双里的点要么同时被选出要么全部都不选。

建圆方树,选出一个方点就代表选出了所有其代表的点双上的所有圆点。

有一个性质:所有被选中的方点是连通的。否则一个连通块必定存在两个点被选出,不满足条件。

不妨以重心为根来计算,若重心为方点则它必被选出,若重心为圆点则至少有一个与其相连的方点被选出。否则一定会存在两个大小相差大于 \(2\) 的连通块。

因为这样的一个方点被选出了,所以还满足:若一个方点被选出,那么其祖先的所有方点都一定被选出。

考虑树形 dp,令 \(siz_u\) 表示以 \(u\) 为根的子树内圆点的数量,\(f_u\) 表示考虑到 \(u\) 时的方案数,\(v\)\(u\) 的儿子。

\(k=0\)

来枚举每个连通块的大小 \(S\),满足 \(S\mid n\),而且实际上 \(f_u\) 要么为 \(0\) 要么为 \(1\)

\(u\) 为方点,那么 \(f_u=\prod f_v\)

\(u\) 为圆点,那么需要满足 \(\sum[siz_v<S]siz_v+1=S\)\(\prod_{siz_v\ge S}f_v=1\)\(f_u\) 才能为 \(1\)

\(k=1\)

同样是枚举连通块大小 \(S\),那么连通块大小只能为 \(S\)\(S+1\)

\(u\) 为方点时,\(f_u=\prod f_v\)

\(u\) 为圆点时:

  • 你知道,若 \(siz_v>S\)\(siz_v\) 必定选上,\(siz_v<S\)\(siz_v\) 不会被选上。
  • \(siz_v=S\) 时,若 \(f_v=0\)\(v\) 必定不选。否则 \(v\) 可选可不选,且不选也要求其它 \(v\) 都被选上。
  • \(tot=\sum[siz_v<S]vis_v,cnt1=\sum[siz_v=S],cnt2=\sum[siz_v=S][f_v=0]\)
  • 那么当 \(tot+1=S\)\(tot+1=S+1\) 时,可以将 \(u\) 合到 \(tot\) 上,有方案数 \(\prod_{siz_v\ge S}f_v\)
  • 同时,若 \(tot=0,cnt2=1\),仅保留一个 \(siz_v=S\),方案数为 \(\prod_{siz_v>S}f_v\)
  • 否则,若 \(tot=0,cnt2=0\),要保留一个 \(siz_v=S\),方案数为 \(cnt1\times\prod_{siz_v>S}f_v\)

QOJ9636 签到题

题目要求最大化 gcd,不妨让我们来枚举 gcd,假设当前枚举的 gcd 为 \(k\)

我们根据 \(k\) 来重新建图,一个点 \(u\) 在图中那么 \(k\mid a_u\),一条边 \(u\to v\) 在图中那么 \(k\mid \gcd(a_u,a_v)\)

可以发现,每个点至多在 \(d(a_u)\) 张图中,也就是说我们把这些图全部拿出来的复杂度为 \(O(n\max(d(a_u)))\),可以接受。

那么我们的目标就是在每个连通块中找到一个点 \(r\),使得其它点到 \(r\) 的距离和最大。

树上

就是一个经典的换根 dp

\(f_u\) 表示在 \(u\) 子树内所有节点到 \(u\) 的距离和,\(g_u\) 表示在 \(u\) 子树为所有节点到 \(u\) 的距离和。

有转移:

\[f_u=\sum f_v+siz_v,\ g_u=g_{fa_u}+N-siz_u \]

那么 \(u\) 节点的贡献就是 \(f_u+g_u\)

基环树

非环上的节点计算方式同树上。

考虑环上节点,相当于断开一条边,可以证得断开的边一定是 \(r\) 所在子树在环上相邻的两条边之一。

仙人掌

仙人掌上每个环的处理方式与基环树相同,因为环上节点的贡献只与 \(r\) 在环上的哪一个子树有关。

可以在圆方树上 dp。

posted @ 2024-12-26 21:33  ddxrS  阅读(13)  评论(0)    收藏  举报