edcc缩点之后跳倍增lca
丢个edcc缩点模板

Code:

#include <cstdio>
#include <cstring>
using namespace std;const int N = 1e5 + 5;
const int M = 2e5 + 5;
const int Lg = 25;int n, m, qn, tot = 1, head[N], dep[N], fa[N][Lg];
int dfsc = 0, dcc = 0, dfn[N], low[N], bel[N], ex[M], ey[M];
bool bri[M << 1], vis[N];struct Edge {int to, nxt;
} e[M << 1];inline void add(int from, int to) {e[++tot].to = to;e[tot].nxt = head[from];head[from] = tot;
}inline void read(int &X) {X = 0;char ch = 0;int op = 1;for(; ch > '9'|| ch < '0'; ch = getchar())if(ch == '-') op = -1;for(; ch >= '0' && ch <= '9'; ch = getchar())X = (X << 3) + (X << 1) + ch - 48;X *= op;
}inline int min(int x, int y) {return x > y ? y : x;
}void tarjan(int x, int inEdge) {dfn[x] = low[x] = ++dfsc;for(int i = head[x]; i; i = e[i].nxt) {int y = e[i].to;if(!dfn[y]) {tarjan(y, i);low[x] = min(low[x], low[y]);if(dfn[x] < low[y]) bri[i] = bri[i ^ 1] = 1;} else if(i != (inEdge ^ 1))low[x] = min(low[x], dfn[y]);}
}void dfs(int x) {bel[x] = dcc;for(int i = head[x]; i; i = e[i].nxt) {int y = e[i].to;if(bel[y] || bri[i]) continue;dfs(y);}
}void dfs2(int x, int fat, int depth) {vis[x] = 1, fa[x][0] = fat, dep[x] = depth;for(int i = 1; i <= 20; i++)fa[x][i] = fa[fa[x][i - 1]][i - 1];for(int i = head[x]; i; i = e[i].nxt) {int y = e[i].to;if(vis[y]) continue;dfs2(y, x, depth + 1);}
}void swap(int &x, int &y) {int t = x;x = y;y = t;
}inline int getLca(int x, int y) {if(dep[x] < dep[y]) swap(x, y);for(int i = 20; i >= 0; i--)if(dep[fa[x][i]] >= dep[y])x = fa[x][i];if(x == y) return x;for(int i = 20; i >= 0; i--)if(fa[x][i] != fa[y][i])x = fa[x][i], y = fa[y][i];return fa[x][0];
}int main() {read(n), read(m);for(int i = 1; i <= m; i++) {read(ex[i]), read(ey[i]);add(ex[i], ey[i]), add(ey[i], ex[i]);}for(int i = 1; i <= n; i++)if(!dfn[i]) tarjan(i, 0);for(int i = 1; i <= n; i++)if(!bel[i]) {++dcc;dfs(i);}/*    for(int i = 1; i <= n; i++)printf("%d ", bel[i]);printf("\n");   */tot = 0;memset(head, 0, sizeof(head));for(int i = 1; i <= m; i++) {if(bel[ex[i]] == bel[ey[i]]) continue;add(bel[ex[i]], bel[ey[i]]), add(bel[ey[i]], bel[ex[i]]);}for(int i = 1; i <= n; i++)if(!vis[i]) dfs2(i, 0, 1);read(qn);for(int x, y; qn--; ) {read(x), read(y);x = bel[x], y = bel[y];if(x == y) puts("0");else printf("%d\n", dep[x] + dep[y] - 2 * dep[getLca(x, y)]);}return 0;
}

转载于:https://www.cnblogs.com/CzxingcHen/p/9466486.html

CH24C 逃不掉的路相关推荐

  1. AcWing 397. 逃不掉的路(边双连通分量缩点成树 + 树链剖分乱搞)

    整理的算法模板合集: ACM模板 我们知道在同一个边双连通分量中的点没有必经边(因为至少有两条分离的路径). 所以我们直接tarjan求出桥后缩点,然后求一下树上两点间的距离即可. 那么如何求树上两点 ...

  2. 为什么劝你别去创业?大抵逃不掉这 101 个问题

    2016年底,当我的同事小白建议把我的思考整理成书的时候,大家都是沉默的.也许大家觉得创业这个话题成书是有难度的. 所以在这里我要感谢蓝狮子和浙江大学出版社,他们给了我这个机会.而在整理和思考的过程中 ...

  3. 哥几个又来看啦,进来吧逃不掉的(Linux精中之精)

    前言:天天敲代码主播的头都要炸了,估计拐友们也炸的一批,但咩办法学这个逃不掉的,乖乖敲吧,但为了让拐友们不是那么的痛苦,主播通宵给你们整理了Liunx精中之精的代码,保证外星人来了都能看懂.(ps:记 ...

  4. 逃不掉的小球-第10届蓝桥杯Scratch国赛真题第1题

    [导读]:超平老师计划推出Scratch蓝桥杯真题解析100讲,这是超平老师解读Scratch蓝桥真题系列的第22讲. 第10届蓝桥杯青少年组国赛于2019年5月25日举行,形式为线下考试,考生自带电 ...

  5. 逃不掉的是回忆,忘不了的是曾经:伤感日志

    逃不掉的是回忆,忘不了的是曾经:伤感日志 - 逃不掉的是回忆,忘不了的是曾经:伤感日志 [我以为我会是唯一的唯一] 开始,Start. 或许是我太天真的,曾经认为我是唯一的唯一. 可是现实一次次把我打 ...

  6. 几度苍凉的伤感独特日志发布:想要逃,却怎么也逃不掉

    几度苍凉的伤感独特日志发布:想要逃,却怎么也逃不掉 - 几度苍凉的伤感独特日志发布:想要逃,却怎么也逃不掉 当你问我:你会和我结婚吗?我不知道.当你问我:你会来看我吗?我不知道. 当你问我:四年后我们 ...

  7. (揭秘监控技术)《潜行追踪》:FBI 给你28天,你也逃不掉,中国版呢?

    上周末,雷锋网编辑小李经人推荐,把美版<Hunted:潜行追踪>第一季刷完了. 这部剧为什么这么好看?和网络安全又有什么联系?要想知道这些问题的答案,先来简单介绍一下: <潜行追踪& ...

  8. 逃不掉的职场中年危机?

    [从发生在你我身边的裁员潮说起] 前段时间有位互联网公司的人力朋友M给我转了张图片,我一看还挺逗: 总之,人脉少的开滴滴,人脉多的做微商. 我给她发了个哭笑不得的表情包,她却有些严肃地回我: &quo ...

  9. java helloworld代码_java学习应用篇|逃不掉的HelloWorld

    本文知识点 1.表白不是发起进攻的冲锋号,而是吹响胜利的号角 2.除了爱情不讲道理,公理也不讲道理 3.这世界,离了javac,也是可以运行的! 4.Hello,寺水 写程序并不是写代码 看前面啰啰嗦 ...

  10. 在中国程序员能不能干一辈子?水平差距再大也逃不掉这个噩梦吗?

    看到题目之前,你一定会有这样的疑问,程序员能不能干一辈子和程序员的水平差距好像并没有关系. 因为你会觉得即使自己是技术大牛,拥有丰富的大厂经验,到了一定的年龄,如果继续从事技术岗位,基本上所有的企业都 ...

最新文章

  1. 【转】Python机器学习库
  2. NeHe教程Qt实现——lesson09
  3. 【C 语言】文件操作 ( 读取文件中的结构体数组 | feof 函数使用注意事项 )
  4. 读书计划清单之碎碎念
  5. python有限循环_Python循环
  6. java 8 stream 性能_java8中parallelStream性能测试及结果分析
  7. Linux环境变量总结
  8. springmvc 结合ajax批量新增
  9. mysql的安装和基本命令_MySQL安装以及简单命令用法
  10. Android handler.obtainMessage()传字符串用法
  11. 天融信荣获《中国信息安全》2018年度“双推”活动两项荣誉
  12. mysql数据词典生成markdown_老板让我把数据库字典导出到Markdown格式的文件
  13. 挖掘数字资产,生意增长是本质,但数据创新仍有难题待解 | 2022全球数字价值峰会...
  14. Windows下WordPress安装教程(全)
  15. 推出 2020 年图像匹配基准和挑战赛
  16. 【华为OD机试真题 JAVA】机器人走迷宫
  17. 全球及中国建筑设计行业十四五发展方向与投资决策建议报告2022版
  18. 局域网内Linux下开启ftp服务的“曲折路”和命令复习
  19. 【微机原理大作业】从0开始设计RTC电子钟系统(三)(含完整源码和仿真图及下载地址)
  20. 基础的unity局域网游戏框架(一)

热门文章

  1. vue.js多页面开发 webpack.config.js 配置方式
  2. PowerShell管理SCOM_批量设置维护模式(上 )
  3. 迁移应用程序到.NET Framework 4.5:弃用类型与新特性
  4. 调查:Blackberry开发者中国大版图
  5. React 页面渲染后自动执行onClick事件问题
  6. (转载)python re模块详解 正则表达式
  7. 网站CPU占满,微信经常SSL不能建立的错误排查
  8. [UWP小白日记-9]页面跳转过度动画(二)
  9. JQuery input file 上传图片
  10. web移动端常见问题解决方案 (转)