CH24C 逃不掉的路
edcc缩点之后跳倍增lca
丢个edcc缩点模板
Code:
#include <cstdio>
#include <cstring>
using namespace std; const int N = 1e5 + ;
const int M = 2e5 + ;
const int Lg = ; int n, m, qn, tot = , head[N], dep[N], fa[N][Lg];
int dfsc = , dcc = , dfn[N], low[N], bel[N], ex[M], ey[M];
bool bri[M << ], vis[N]; struct Edge {
int to, nxt;
} e[M << ]; 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 = ;
char ch = ;
int op = ;
for(; ch > ''|| ch < ''; ch = getchar())
if(ch == '-') op = -;
for(; ch >= '' && ch <= ''; ch = getchar())
X = (X << ) + (X << ) + ch - ;
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 ^ ] = ;
} else if(i != (inEdge ^ ))
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] = , fa[x][] = fat, dep[x] = depth;
for(int i = ; i <= ; i++)
fa[x][i] = fa[fa[x][i - ]][i - ];
for(int i = head[x]; i; i = e[i].nxt) {
int y = e[i].to;
if(vis[y]) continue;
dfs2(y, x, depth + );
}
} 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 = ; i >= ; i--)
if(dep[fa[x][i]] >= dep[y])
x = fa[x][i];
if(x == y) return x;
for(int i = ; i >= ; i--)
if(fa[x][i] != fa[y][i])
x = fa[x][i], y = fa[y][i];
return fa[x][];
} int main() {
read(n), read(m);
for(int i = ; i <= m; i++) {
read(ex[i]), read(ey[i]);
add(ex[i], ey[i]), add(ey[i], ex[i]);
} for(int i = ; i <= n; i++)
if(!dfn[i]) tarjan(i, );
for(int i = ; i <= n; i++)
if(!bel[i]) {
++dcc;
dfs(i);
} /* for(int i = 1; i <= n; i++)
printf("%d ", bel[i]);
printf("\n"); */ tot = ;
memset(head, , sizeof(head));
for(int i = ; 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 = ; i <= n; i++)
if(!vis[i]) dfs2(i, , ); read(qn);
for(int x, y; qn--; ) {
read(x), read(y);
x = bel[x], y = bel[y];
if(x == y) puts("");
else printf("%d\n", dep[x] + dep[y] - * dep[getLca(x, y)]);
}
return ;
}
CH24C 逃不掉的路的更多相关文章
- CH#24C 逃不掉的路 和 HDU3686 Traffic Real Time Query System
逃不掉的路 CH Round #24 - 三体杯 Round #1 题目描述 现代社会,路是必不可少的.任意两个城镇都有路相连,而且往往不止一条.但有些路连年被各种XXOO,走着很不爽.按理说条条大路 ...
- ContestHunter#24-C 逃不掉的路
Description: 求无向图的必经边 思路:一眼题 将无向图缩成树,然后求两点树上距离 #include<iostream> #include<vector> #incl ...
- CH Round #24 - 三体杯 Round #1-C 逃不掉的路
留个e-DCC的板子 #include<cstdio> #include<iostream> #include<cstring> #include<cstdl ...
- 高并发第九弹:逃不掉的Map --> HashMap,TreeMap,ConcurrentHashMap
平时大家都会经常使用到 Map,面试的时候又经常会遇到问Map的,其中主要就是 ConcurrentHashMap,在说ConcurrentHashMap.我们还是先看一下, 其他两个基础的 Map ...
- 逃不掉的mysql数据库安装方式大全yum rpm 源码
数据库虽然也不是天天安装,但每次安装都要找来找去挺烦,特整理记录在此. 系统基于:Centos 7.x 数据库版本: MySQL 5.7.x 转载请注明出处 Yum 安装方式 1.下载 yum rep ...
- Spring Cloud实战 | 第十篇 :Spring Cloud + Seata 1.4.1 + Nacos1.4.0 整合实现微服务架构中逃不掉的话题分布式事务
Seata分布式事务在线体验地址:https://www.youlai.store 本篇完整源码地址:https://github.com/hxrui/youlai-mall 有想加入开源项目开发的童 ...
- 『Tarjan算法 无向图的双联通分量』
无向图的双连通分量 定义:若一张无向连通图不存在割点,则称它为"点双连通图".若一张无向连通图不存在割边,则称它为"边双连通图". 无向图图的极大点双连通子图被 ...
- D8 双连通分量
记得有个梗那一天,zw学生zzh大佬说逃不掉的路变成a不掉的题哈哈哈哈: 分离的路径: BZOJ 1718POJ 3177LUOGU 286: 思路:在同一个边双连通分量中,任意两点都有至少两条独立路 ...
- P6跨级晋升P8再到P10,我的11年成长之路
来自:语雀,作者:玉伯 链接:https://www.yuque.com/yubo/morning/grow-up-at-alibaba 注:这是在阿里内部前端大学的一个分享,整理了一份对外的版本,希 ...
随机推荐
- Hadoop单机模式和伪分布式搭建教程CentOS
1. 安装JAVA环境 2. Hadoop下载地址: http://archive.apache.org/dist/hadoop/core/ tar -zxvf hadoop-2.6.0.tar.gz ...
- Apache Kafka:下一代分布式消息系统【转载】
简介 Apache Kafka是分布式发布-订阅消息系统.它最初由LinkedIn公司开发,之后成为Apache项目的一部分.Kafka是一种快速.可扩展的.设计内在就是分布式的,分区的和可复制的提交 ...
- swing之记事本的简单实现
package gui1; import java.awt.BorderLayout; import javax.swing.ImageIcon; import javax.swing.JButton ...
- Mxgraph使用总结一
一.Mxgraph介绍: mxGraph 是一个 JS 绘图组件适用于需要在网页中设计/编辑 Workflow/BPM流程图.图表.网络图和普通图形的 Web 应用程序.mxgraph 下载包中包括j ...
- docker镜像的导入和导出
启动命令 docker run -d -p 3000:80 twang2218/gitlab-ce-zh:9.0.3 docker run -d -p 8080:80 gitlab/gitlab-ce ...
- Jet Brains家族XX方法
声明:本文转载自 https://www.jianshu.com/p/f404994e2843 2018/11/23
- 蓝桥杯 基础练习 BASIC-23 芯片测试
基础练习 芯片测试 时间限制:1.0s 内存限制:512.0MB 问题描述 有n(2≤n≤20)块芯片,有好有坏,已知好芯片比坏芯片多. 每个芯片都能用来测试其他芯片.用好芯片测试其他芯片时, ...
- 蓝桥杯 历届试题 PREV-34 矩阵翻硬币
历届试题 矩阵翻硬币 时间限制:1.0s 内存限制:256.0MB 问题描述 小明先把硬币摆成了一个 n 行 m 列的矩阵. 随后,小明对每一个硬币分别进行一次 Q 操作. 对第x行第y列的硬 ...
- iOS下拉图片放大
效果图 开始简单的代码过程 其实思路很简单 就是 让tableView偏移 一图片的高度,然后在把图片添加到tableView中,然后再监听didScrollView,在里面改变图片的frame - ...
- MySQL 数据库 练习题
一.表关系 请创建如下表,并创建相关约束 二.操作表 1.自行创建测试数据 2.查询“生物”课程比“物理”课程成绩高的所有学生的学号: 3.查询平均成绩大于60分的同学的学号和平均成绩: 4.查询所有 ...