博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[ZJOI2004]嗅探器 (割点)
阅读量:5255 次
发布时间:2019-06-14

本文共 1001 字,大约阅读时间需要 3 分钟。

这题就比较好玩吧水题

以数据范围来看随便怎么做就能过

\(O(n)\)显然我们得过一个割点,其次这个割点得在\(x-y\)中间且不为始终点

其他都好说,在中间:从\(x\)开始遍历,首先得保证\(x-y\)不是同一个点双,然后求中间的割点就好了\(dfn[v]≤dfn[y]\)

#include
using namespace std;typedef int LL;const LL maxn=1e6+9,inf=0x3f3f3f3f;struct node{ LL to,nxt;}dis[maxn];LL num,n,tim,ans,x,y;LL head[maxn],dfn[maxn],low[maxn];inline void Add(LL u,LL v){ dis[++num]=(node){v,head[u]}; head[u]=num;}void Tarjan(LL u){ dfn[u]=low[u]=++tim; for(LL i=head[u];i;i=dis[i].nxt){ LL v(dis[i].to); if(!dfn[v]){ Tarjan(v); low[u]=min(low[u],low[v]); if(u!=x && u!=y && low[v]>=dfn[u] && dfn[v]<=dfn[y] && low[y]>=dfn[x]) ans=min(ans,u); } low[u]=min(low[u],dfn[v]); }}int main(){ cin>>n; LL u,v; while(scanf("%d%d",&u,&v) && u){ Add(u,v); Add(v,u); } cin>>x>>y; ans=inf; Tarjan(x); if(ans==inf) cout<<"No solution"; else cout<

转载于:https://www.cnblogs.com/y2823774827y/p/10580648.html

你可能感兴趣的文章
JS让网页上文字出现键盘打字的打字效果
查看>>
并发编程 - IO模型 - 1.io模型/2.阻塞io/3.非阻塞io/4.多路复用io
查看>>
nginx正则说明
查看>>
Nginx反向代理的目录访问问题
查看>>
九九乘法表
查看>>
css 学习笔记 一
查看>>
任务表 步骤表
查看>>
Maven 构建配置文件
查看>>
chapter02 - 03 作业
查看>>
UML第五次作业
查看>>
修改Android开机画面
查看>>
关于 jquery 的常用面试题(转)
查看>>
POJ 1160 Post Office
查看>>
解决使用maven的java web项目导入后出现的有关问题 -cannot be read or is not a valid ZIP file...
查看>>
java面试题之select、poll和epoll的区别
查看>>
关于XAMPP Apache无法启动问题解决方案
查看>>
python中字符与ascii码转换
查看>>
mac中安装lua5.1.5
查看>>
springMVC参数传递实例
查看>>
函数进阶
查看>>