CF1919G Tree LGM

发布时间 2024-01-08 11:24:34作者: zhouhuanyi

原问题可以看作是二分图博弈的模型,那么可以将博弈问题转化为最大匹配的一定性判定性问题,实际上博弈的 \(\text{dp}\) 过程直接摊开就是每次删任意一个叶子与其父亲,将父亲变为 \(1\),这个也就是最大匹配的求解过程,而是否为匹配的上端点即该点的 \(01\) 状态,那么实际上每一行的 \(1\) 的个数就相当于这棵树的最大匹配数。

直接按行分析是困难的,虽然可以借助类似 \(\text{Hall}\) 定理的判定导出一个拓扑序,并且即便该拓扑序不合法也可以通过调整树的形态使其变为一个合法的拓扑序,但实际上这是因为局部性结构的局限性,导致树的整体性被破坏,比如我们会丢失这棵树最大匹配的信息,所以我们在分析时应尽量的考虑这棵树最大匹配的信息。

另外一个考虑是删一个点的影响,令删除的点为 \(x\),那么 \(rt\) 的选择恰好可以反映在决策 \(x\)\(x\) 的匹配方式,对于 \(x\) 的所有子树,如果其没有供给 \(x\) 作为匹配,那么显然全部为 \(0\),如果其供给了一个,则该子树的 \(rt\)\(0\),其余子树为 \(1\),如果供给了两个,则删任意一个必然都存在一个供给,那么为全 \(1\)

实际上通过上述过程,我们发现题目描述的全部信息如下:

\(1.\) 当一个点 \(x\) 不一定在最大匹配中,返回 \(\text{A}\)

\(2.\) 当一个点 \(x\) 一定在最大匹配中,且其出边 \(y\) 也一定在最大匹配中,返回 \(\text{B}\) 以及 \(x\) 为根时 \(y\) 所在的子树,实际上相当于存在 \(y\) 满足 \((x,y)\) 是一定在最大匹配中的边。

\(3.\) 当一个点 \(x\) 一定在最大匹配中,且其可匹配的出边不只一条,返回 \(\text{C}\),这个相当于 \(x\)\(x\) 的出边构成了一个子菊花图,分别对应 \(x\)\(x\) 的选择方式,当不同的子菊花图可能有交集,但相当于要求每个选择方式不能有交,实际上任意两个子菊花图的大小至多为 \(1\)

仅凭借这些信息显然是无法确定整颗树,但我们刻画出了这颗树的大致轮廓,若干个一定在最大匹配的边集通过一些子菊花图的树形连接结构串连起来。

由于 \(2\) 的一定在最大匹配的边集构成了互补关系,可以用 \(\text{xor hashing}\) 等方式求出这些互补关系的匹配,而这些匹配连接出的树以可以通过 \(2\) 中的信息还原。

但直接将这些匹配连起来是肯定不行的,因为我们还原的是匹配构成的虚树,中间可能有若干个子菊花图连成的树型结构作为中介,但通过子树关系我们可以还原出每个在虚树外侧的点插入在虚树边集上的位置,那么我们只需要判这些点是否能够相连即可,特别的这些点可能连接在根节点的上方,这个加一个 \(0\) 虚拟节点即可解决。

现在对于每一个虚树上的节点,现在要将其连成子菊花图构成的树集,根显然要用两个,其余的可以和父亲共用一个再向下连一个,多出的直接连到根即可,连不了即无解。

由于这个题还有无解,而无解的情况可能会很奇怪导致上述操作可能都误判,所以最终还要判一下解是否合法,即可做到 \(O(n^2)\)

实际上本题应该还可以求方案数,由于不确定的部分只有在虚树边的连接方式上,而虚树边上的所有节点都是互不影响的,所以可以分开算方案数再乘起来,而连接方案数可以用 \(\text{prufer}\) 序快速求出。