[Luogu4320]

必经点数==圆方树上两点路径上圆点数

也就等于边数/2+1

没什么好说的 , 看代码

#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#define debug(...) fprintf(stderr,__VA_ARGS__)
#define Debug(x) cout<<#x<<"="<<x<<endl
using namespace std;
typedef long long LL;
const int INF=1e9+7;
inline LL read(){register LL x=0,f=1;register char c=getchar();while(c<48||c>57){if(c=='-')f=-1;c=getchar();}while(c>=48&&c<=57)x=(x<<3)+(x<<1)+(c&15),c=getchar();return f*x;
}const int N=1e6+5;
const int M=2e6+5;struct Graph{struct Edge{int v,nxt;}e[M];int first[N],Ecnt=0;inline void Add_edge(int u,int v){e[++Ecnt]=(Edge){v,first[u]};first[u]=Ecnt;}inline void link(int u,int v){Add_edge(u,v);Add_edge(v,u);}
}G,T;int low[N],dfn[N],st[N],size[N],fa[N],top[N],son[N],dep[N];
int n,m,Q,dft,tp;inline void tarjan(int u){dfn[u]=low[u]=++dft;st[++tp]=u;for(int i=G.first[u];i;i=G.e[i].nxt){int v=G.e[i].v;if(!dfn[v]){tarjan(v);low[u]=min(low[u],low[v]);if(low[v]>=dfn[u]){T.link(++n,u);while(st[tp]!=v) T.link(n,st[tp--]);T.link(n,st[tp--]);}}else low[u]=min(low[u],dfn[v]);}
}inline void dfs1(int u,int pre){dep[u]=dep[pre]+1,fa[u]=pre,size[u]=1;for(int i=T.first[u];i;i=T.e[i].nxt){int v=T.e[i].v;if(v==pre) continue;dfs1(v,u);size[u]+=size[v];if(size[v]>size[son[u]]) son[u]=v;}
}inline void dfs2(int u,int tp){top[u]=tp;if(son[u]){dfs2(son[u],top[u]);}for(int i=T.first[u];i;i=T.e[i].nxt){int v=T.e[i].v;if(v==fa[u]||v==son[u]) continue;dfs2(v,v);}
}inline int LCA(int x,int y){while(top[x]!=top[y]){if(dep[top[x]]<dep[top[y]]) swap(x,y);x=fa[top[x]];}if(dep[x]<dep[y]) return x;return y;
}int main(){n=read(),m=read();for(int i=1;i<=m;i++){int x=read(),y=read();G.link(x,y);}tarjan(1);dfs1(1,0);dfs2(1,1);Q=read();while(Q--){int x=read(),y=read(),p=LCA(x,y);printf("%d\n",(dep[x]+dep[y]-2*dep[p])/2+1);}
}

转载于:https://www.cnblogs.com/lizehon/p/10598710.html

P4320 道路相遇相关推荐

  1. 【luogu P4320】道路相遇(圆方树)

    道路相遇 题目链接:luogu P4320 题目大意 给你一个无向连通图,无重边自环,然后每次给你两点,问你有多少个点是两点间路径必有的. 思路 圆方树pre模板题? 圆方树怎么做这里不说,看铁人两项 ...

  2. 道路相遇【一般图的圆方树-广义圆方树】

    题目链接 刚开始拿到这道题的时候,先写了Tarjan缩点构树,没过样例,但是先把40分拿到了. 然后再想,就如同样例给出的那样,我们所定义的原点和方点,实际上在Tarjan直接缩点上并不能起到直接体现 ...

  3. 【蒟蒻の笔记】圆方树初识

    圆方树 首先描述一下圆方树: 注:我们把一条边连接两个节点的图也认为是点双连通的. 对于一个无向连通图,对于每个点双连通分量建立一个新的点,新的点作为"方点",原本的点作为&quo ...

  4. devops 文化_谁在DevOps中推动文化发展?

    devops 文化 文化是DevOps的重要组成部分,因此许多组织投入了大量的精力来试图找出组成一支优秀团队的原因. Google成立了一个名为"亚里斯多德计划"的完整计划来研究这 ...

  5. 大流行时代的三大社会技术影响

    Well- Here we are. Just a few years after Bill Gates started warning us about the impending crises f ...

  6. 《OpenDRIVE1.6规格文档》4

    目录 9.5.7 车道高度 9.5.8 从道路超高程中排除车道 9.6 道路标识 9.6.1 路标类型和线条 9.6.2 显性路标类型和线条 9.6.3 路标偏移 9.7 特定车道规则 10 交叉口 ...

  7. SUMO入门(六) - 交通灯

    SUMO入门(六) - 交通灯 Simulation/Traffic Lights 通常,NETCONVERT 和 NETGENERATE 在计算网络期间为交叉口生成交通信号灯和程序. 尽管如此,这些 ...

  8. 倒计时1天!相约杭州云栖,相遇数据智能

    原文链接:http://click.aliyun.com/m/14003/ [大数据专场时间表] 阿里云数加本次云栖大会共输出6个分会场(大数据业务专场.人工智能专场.大数据实战/Workshop.M ...

  9. P4320-道路相遇,P5058-[ZJOI2004]嗅探器【圆方树,LCA】

    两题差不多就一起写了 P4320-道路相遇 题目链接:https://www.luogu.com.cn/problem/P4320 题目大意 nnn个点mmm条边的一张图,qqq次询问两个点之间路径的 ...

  10. 一位36岁女教师关于教职、学术、幸福及正确道路的思考

    娜拉,是易卜生话剧<玩偶之家>中的主人公,她最有名的事迹就是"出走"--离开了她那伪善的家.剧中,大门嘎吱一声,高潮处即落幕.可现实中的"出走"不是 ...

最新文章

  1. bootstrap --- 分页
  2. 403 forbidden_[SpringSecurity] 自定义403页面
  3. elasticsearch 6.x (三) linux 集群多节点部署
  4. 20 年前,微软怎样改变了我们鼠标的使用方式?| 极客头条
  5. 基于FVC_MSAVI_EVI的荒漠化等级分类方法
  6. JAVA学习笔记:目录
  7. win xp系统安装在虚拟机里面无法连接网络,无本地连接问题解决
  8. 修改华为 Echolife HG8010h 的超级用户密码
  9. GM8827C 多通道LVDS 串行发送器,27位CMOS/TTL信号转化为多路LVDS信号
  10. 《那些年啊,那些事——一个程序员的奋斗史》——113
  11. mybatis一对多关联查询分页解决方案
  12. js 深浅拷贝的整理
  13. json生成shp_shp与json互转(转载)
  14. ubuntu18.04企业微信乱码
  15. 批量创建Azure DevOps Server 的账户
  16. Go语言的流程结构简单介绍
  17. Github Emoji——Github表情大全
  18. mysql不等于条件不包含NULL值问题
  19. EBS开发_收款核销API
  20. caj转pdf——包含下载链接

热门文章

  1. 谈谈VIP漂移那点破事
  2. 自定义View时,用到Paint Canvas的一些温故,简单的帧动画(动画一 ,quot;掏粪男孩Gifquot;顺便再提提onWindowFocusChanged)...
  3. 仿微信添加触摸图片阴影效果
  4. quick-cocos2d-x GameCenter 排行榜
  5. oracle错误代码及解决办法整合
  6. 【转】《风雨哈佛路》观后感
  7. 教你如何用双SATA硬盘组建RAID系统
  8. Photoshop操作秘籍
  9. Submitting Applications
  10. 解决问题---docker:transport: dial unix:///var/run/docker/containerd/docker-containerd.sock: time