CodeForces Round 898 (div 4) H题分析

王柳  金牌会员 | 2024-7-17 11:50:27 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 891|帖子 891|积分 2673

 

 
CodeForces Round 898 (div 4)
H. Mad  City



                                                    
大致思绪     


  • 对于有n条边和n个点,说明这个图内里只有一个环
  • 并且两人同时开始和结束移动,以是可以得到当Valeriu进入到这个图内里的唯一的环内里时,Marcel就无法再抓到他,我们可以把离Valeriu最近的入环点叫做KeyPoint,以是我们就需要考虑Valeriu是否能在Marcel赶到KeyPoint之前赶到KeyPoint。
  • 以是找到入环点是这道题的切入点,找到入环点,我们就可以通过dfs暴搜来得出他们和入环点的距离来,通过比较来得出是否可以或许逃离。
Key:入环点的探求

思绪来源于洛谷的_Ink大佬
方法是通过拓扑,由于在拓扑的过程中,会一步步去删点删边,最后只剩下一个环。由于是要找离逃离者最近的入环点,以是我们可以把一开始的KeyPoint设为b点,即要逃离者地点地点,当 Keypoint 地点的点将被删时,由拓扑排序的特性,此时仅有一条边与其相连,以是我们可以在删这个点时顺势把KeyPoint 值更新到与被删点相连的那个点上。
由于拓扑排序不会删掉环上的点,以是当 KeyPoint 值不停更新,直到更新到环上的点时就不再发生变化。此时,KeyPoint 值就是我们想要的那个点的编号了。
这道题的图为无向图,以是拓扑过程中的删点删边条件应该为入度为1,这样环上的点就永远不会被删除。
完整代码

[code]#include using namespace std;const int N = 200060, M = N > n >> a >> b;    init();    keypoint = b;    for(int i=1;i> u >> v;        add(u, v);        add(v, u);        to++;        to[v]++;//由于是双向门路,以是两个点的入度都+1    }    for (int i = 1; i = 2 && a != b)//如果一开始b就在环上,而且a没有和b在同一栋大楼,就说明可以无穷期逃    {        cout
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

王柳

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表