UOJ #751 -【UNR #6】神隐(交互题)

考场一直在做这题,然后只拿了 50(极限是 70,有个 20 的包本来以为加点剪枝能过的但是没过),被杀爆哩 /ll

首先很明显,这个 \(\text{lim}\)\(\log\) 级别的,那么我们考虑对每个二进制位进行询问,即,考虑每个二进制位,问一遍该二进制位为 \(1\) 的那些边,再问一遍该二进制位为偶数的边,这样对于一个点 \(x\) 而言,对于与其距离 \(\ge 2\) 的某个点 \(y\),假设 \(x,y\) 路径上的两条边为 \(e_1,e_2\),那么显然对于 \(e_1\oplus e_2\) 的那些二进制位,\(x,y\) 不论在这一位为 \(1\) 的边集组成的子图中,还是在这一位为 \(0\) 的子图中都不连通,由此判断出树的边集。

考虑优化,注意 \(\dbinom{14}{7}>2000,\dbinom{20}{10}>131072\),因此考虑用 \(20\) 位由 \(10\)\(1\) 组成的二进制数给边集重标号。每次只对这 \(20\) 位中标号为 \(1\) 的边集进行询问,然后检查下两点是否同时在恰好 \(10\) 个子图中位于同一个连通块。

直接做是平方的。考虑优化。发现每一步我们可以知道叶子是什么,就是在 \(10\) 次询问中都是孤立点的点。我们重复删去叶子直到删空这张图,然后得出每个点距离其最近的叶子离其的距离 \(d_i\)。然后考虑如何判断与一个叶子相连的点,发现就是另外 \(10\) 个子图中连通块的交,从这方面入手难度还是有点大,可以注意到一个性质:它的父亲一定是所有集合中 \(d\) 最大的点中的最小值。然后就没有然后了。现场没有想到怎么快速求交就寄了。

最后一阶段只口胡不写代码。

posted @ 2022-08-07 20:46  tzc_wk  阅读(168)  评论(0)    收藏  举报