博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Codeforces 1045C Hyperspace Highways (看题解) 圆方树
阅读量:5142 次
发布时间:2019-06-13

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

学了一下圆方树, 好神奇的东西呀。

#include
#define LL long long#define fi first#define se second#define mk make_pair#define PLL pair
#define PLI pair
#define PII pair
#define SZ(x) ((int)x.size())#define ull unsigned long longusing namespace std;const int N = 2e5 + 7;const int inf = 0x3f3f3f3f;const LL INF = 0x3f3f3f3f3f3f3f3f;const int mod = 1e9 + 7;const double eps = 1e-9;const double PI = acos(-1);int n, m, q;vector
G[N];vector
G1[N];int dfn[N], low[N], idx, nn;int stk[N], top;void tarjan(int u, int preid) { dfn[u] = low[u] = ++idx; stk[++top] = u; for(auto& e : G[u]) { if(e.se == preid) continue; int v = e.fi; if(!dfn[v]) { tarjan(v, e.se); low[u] = min(low[u], low[v]); if(low[v] >= dfn[u]) { nn++; G1[u].push_back(nn); G1[nn].push_back(u); do { G1[stk[top]].push_back(nn); G1[nn].push_back(stk[top]); } while(stk[top--] != v); } } else low[u] = min(low[u], dfn[v]); }}int f[N][20], depth[N];void dfs(int u, int fa) { depth[u] = depth[fa] + 1; f[u][0] = fa; for(int i = 1; i < 20; i++) f[u][i] = f[f[u][i - 1]][i - 1]; for(auto& v : G1[u]) { if(v == fa) continue; dfs(v, u); }}int getLca(int u, int v) { if(depth[u] < depth[v]) swap(u, v); for(int i = 19; i >= 0; i--) if(depth[f[u][i]] >= depth[v]) u = f[u][i]; if(u == v) return u; for(int i = 19; i >= 0; i--) if(f[u][i] != f[v][i]) u = f[u][i], v = f[v][i]; return f[u][0];}int main() { scanf("%d%d%d", &n, &m, &q); nn = n; for(int i = 1; i <= m; i++) { int u, v; scanf("%d%d", &u, &v); G[u].push_back(mk(v, i)); G[v].push_back(mk(u, i)); } for(int i = 1; i <= n; i++) if(!dfn[i]) tarjan(i, -1); dfs(1, 0); while(q--){ int u, v; scanf("%d%d", &u, &v); int lca = getLca(u, v); printf("%d\n", (depth[u] + depth[v]) / 2 - depth[lca]); } return 0;}/**/

 

转载于:https://www.cnblogs.com/CJLHY/p/10662534.html

你可能感兴趣的文章
Python day 7(2) 类和实例(1)
查看>>
理了么项目——测试计划
查看>>
java 常用的三大集合类
查看>>
django项目的大致流程
查看>>
概率期望学习笔记
查看>>
什么是多态
查看>>
T-SQL逻辑查询
查看>>
Subversion更新yum源
查看>>
mac os系统go安装:go install github.com/nsf/gocode: open /usr/local/go/bin/gocode: permission denied...
查看>>
常用SQL分组最大值记录
查看>>
(转)Python中sort和sorted的区别和使用方法
查看>>
Eclipse插件安装4种方法
查看>>
JavaWeb学习总结(十二)——Session
查看>>
王爽汇编 实验13
查看>>
HDU - 1232 畅通工程【并查集】
查看>>
maven 控制台 打包
查看>>
Android 之布局(一)
查看>>
hadoop mapreduce经常OOM
查看>>
【转载】使用注解和反射实现通用性…
查看>>
使用Stickers拓展集成iMessage简单功能
查看>>