【题解】Solution Set - NOIP2024集训Day56 2-sat & 哈希

【题解】Solution Set - NOIP2024集训Day56 2-sat & 哈希

https://www.becoder.com.cn/contest/5640


「CF568C」New Language

做过的 2-sat 。


「JOISC 2020 Day1」汉堡肉

详细题意见 becoder


「模板」树同构

spdarkle's blog


独钓寒江雪

考虑一个树 dp。

fu,0=fv,0/1fu,1=fv,0Ans=f1,0/1

难点在于去重。

实际上方案重复,当且仅当子树中出现重构。(因为此时交换两棵同构且方案相同的子树时,方案相同

所以在合并子树的时候,我们自然的把等价类(就是同构的一堆子树),拎出来一起处理。

对于一个等价类,设每一颗子树的方案数为 m,个数为 n

考虑其对 fu 的贡献。就是我们给每个子树分配一种方案,不考虑顺序。

所以其对 fu 的贡献为 mnn!。(FAKE(因为在重复的时候,不止是除以 n! 那么简单。

现在问题其实等价于,m 个盒子,n 个球放入,可以空盒。

所以其对 fu 的贡献为 (n+m1m1)=(n+m1n)


注意要以重心为根做这个 dp。

如果我们让一个点为根节点,其满足存在另一个点为根后与之同构,那么这样的点是不能作为子树被去重到的。

所以我们要选一个点,以其为根,形成的有根树是唯一的,而重心就一定满足这个性质。

(FAKE(因为虚点的两个子树不能同时被选。

如果有两个重心,将她们两个连到一个虚点,然后以之为根正常做就行了。(最后输出的时候相当于钦定虚点不能成为独立集中的点。

正确的做法是:

将她们分开做,然后再合并就行了。(具体怎么合并可以见代码。


「NOI2024」集合

做过。

做法见 提交记录


「CSP-S2022」星战

简要题意:

给定有向图。

  • 修改

    1. 使一条边 失效/恢复;
    2. 使一个点的所有入边 失效/恢复。
  • 查询

    判断每个点是否出度都为 1,且能够走到一个环。


首先既然我们都保证了出度为 1,就一定合法。

这个用随机化 hash 是好 O(1) 判的,现在问题在于维护 修改 2。

哦!简单,先预处理出删每个点的入边的时候对总的 hash 值的影响,然后直接更新就行了。

posted @   CloudWings  阅读(15)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示