【题解】CF1514E Baby Ehab's Hyper Apartment
首先竞赛图缩点是一条链状 DAG,拥有唯一拓扑序,如果能知道缩点后的结果就很容易得到答案了。
首先考虑找到一条长度为 \(n\),包含 \([0,n-1]\) 所有点的路径。注意到 \(a\rightarrow b\) 意味着 \(a\) 缩点后所属的大点一定不在 \(b\) 所属的大点之后,所以最终缩点得到的结果肯定是对应了这条路径上的每段区间。
此时考虑怎么找路径。首先考虑分治,找出 \([l,mid]\) 和 \([mid+1,r]\) 的路径,接下来考虑拼接,考虑两个路径的头分别为 \(a,b\),如果有 \(a\rightarrow b\),那么新路径一定能用 \(a\) 做头,接下来是接的 \(b\) 还是 \([l,mid]\) 路径上的第二个节点都是满足要求的——这个是原问题的子问题。
思考归并排序的过程,可以发现两者本质一样,所以可以直接套用归并排序的复杂度,这一部分是 \(O(n\log n)\) 的。(\(n\leq 100\) 的话 \(\log n\) 大概为 \(7\),满足限制)。
接下来就是找区间,考虑从后往前找,维护当前可以到达的最前的点是多少,注意到如果 \(i\) 最远能到 \(j\),若 \(i=j\) 那么 \(i\) 就是一个区间的左端点了,否则 \(i-1\) 也一定能最远到达 \(j\),只需要在 \(i-1\) 从 \(j\) 往前考虑即可,实际询问次数满足要求(最多询问出 \(n\) 个 \(1\),也最多询问出 \(n\) 个 \(0\))。
代码:Submission #127654693 - Codeforces
重点是竞赛图缩点成链状 DAG的结论,还有是对归并排序的应用。