首页 > 其他分享 >CF1889D

CF1889D

时间:2023-10-30 20:44:34浏览次数:32  
标签:10 le CF1889D 元素 栈顶 建图 答案

题意

给定\(n\)个栈,栈的大小分别为\(k_i\),每个栈内元素\(\in[1,n]\),记从第\(i\)个栈开始的答案为\(ans_i\),流程:若栈\(i\)为空,答案为\(i\);否则弹出栈顶元素\(x\),并前往栈\(x\),继续刚才的操作。
\(n\le 10^5,\sum k_i\le 10^6\)

做法

考虑弱化情况,\(k_i=1\),记栈\(i\)元素为\(p_i\),建图\(i\longrightarrow p_i\),图为根向基环森林,将环边全部删掉,为根向森林,不难发现每个栈的答案为该点所在树的根

考虑原题,我们发现:取出栈顶元素同弱化情况一样建图,对于所有在环上的点,将该栈的栈顶元素弹出,不影响答案。

反复进行该操作即可,容易做到线性复杂度

标签:10,le,CF1889D,元素,栈顶,建图,答案
From: https://www.cnblogs.com/Grice/p/17798720.html

相关文章

  • CF1889D. Game of Stacks
    啊啊啊每次补完题都感觉这题我场上应该是能想出来的啊!考虑简化问题:若每个栈内只有一个元素,how。此时我们发现所有栈之间构成了一个内向基环树。且环是没有用的,因为我们在环上走一圈之后仍然会回到原点。所以不妨把所有环边删除,此时每棵树的答案即为树根。而对于原问题,同理,我们......