CF1611E2 Escape The Maze (hard version)
题目简化
我在1号节点,你有k个朋友,分别在a1,a2,a3....ak的位置,在同一时间内可以移动1步,我不能和朋友走到同一个节点,如果我能走到叶节点,我就赢了,输出-1,否则必然有一种方案可以堵住我
求需要最少的朋友
首先一个性质
当我和朋友面向而行时,我和朋友每个单位时间内走一步,所以最多\(\lceil d/2 \rceil\)次就可以堵住他,如果有插口,同向而行的话,因为速度是相等的,可一说是不可能堵到我,那么ai的朋友就不可能堵到我了,那么可以说第i个朋友,在ai和在ai向上跳\(\lceil d/2 \rceil\)位置是等价的,这里只需要先dfs记录一下ai向上跳\(\lceil d/2 \rceil\)在哪里就可以了,最后再dfs一遍,模拟我从1走到叶子结点的
同时仍有一个问题,在预处理阶段,要对每一个朋友向上走,N<=2e5,所以最多跳1e5个节点,又要对n个点去做操作时间复杂度O(N*N/2)明显超时,小trick 从1向下搜,把每一个点放入stack中,如果找到了a1,那么现在stack中的元素就是他所在的层数只需要交换这两个点就可以了、时间复杂度O(1),因为把每个点搜了一遍,总时间复杂度O(N)
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/928715.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!