博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
会爆栈,dfs传参,只能传1个~~RMQLCA在线
阅读量:5239 次
发布时间:2019-06-14

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

#include
#include
#include
#pragma comment(linker, "/STACK:1024000000, 1024000000")#include
using namespace std;const int M = 400015;struct Edge{ int v, next;} edge[M << 1];int cnt;int F[M<<1], rmq[M << 1], P[M];int dp[20][M<<1];int E; int head[M];void add_edge(int s, int v){ edge[E].next = head[s]; edge[E].v = v; head[s] = E ++;}int vis[M];int dep[M];void dfs(int u){ cnt ++; F[cnt] = u; rmq[cnt] = dep[u]; P[u] = cnt; vis[u] = 1; for(int i = head[u]; i != -1; i = edge[i].next){ int v = edge[i].v; if(vis[v]) continue; dfs(v); cnt ++; rmq[cnt] = dep[u]; F[cnt] = u; }}void RMQ(int n){ for(int i = 1; i <= n; i ++) dp[0][i] = i; for(int j = 1; (1<
<= n; j ++) { int tmp = 1<<(j-1); for(int i = 1; i + tmp <= n; i ++){ dp[j][i] = (rmq[dp[j-1][i]] < rmq[dp[j-1][i + tmp]])?dp[j-1][i]:dp[j-1][i + tmp]; } }}int query(int L, int R){ if(L > R) swap(L, R); int t = R - L+1; int k = 0; while(t >= (1<<(k+1))) k ++; return rmq[dp[k][L]] < rmq[dp[k][R-(1<
q; q.push(1); vv[1] = 1; dep[1] = 1; while(!q.empty()){ int u = q.front(); q.pop(); for(int i = head[u]; i != -1; i = edge[i].next){ int v = edge[i].v; if(vv[v]) continue; dep[v] = dep[u] + 1; vv[v] = 1; q.push(v); } }}int main(){ int n, m; scanf("%d%d", &n, &m); int a, b; memset(head, -1, sizeof(head)); for(int i = 2; i <= n; i ++){ scanf("%d", &a); add_edge(a, i); add_edge(i, a); } cnt = 0; bfs(); dfs(1); RMQ(2*n); while(m --){ scanf("%d%d", &a, &b); int lc = solve(a, b); if(lc == a) printf("%d %d\n", rmq[P[lc]], rmq[P[b]] - rmq[P[lc]]); else if(lc == b){ printf("%d %d\n", rmq[P[a]] - rmq[P[lc]], rmq[P[lc]]); }else { printf("%d %d\n", rmq[P[a]], rmq[P[b]] - rmq[P[lc]]); } } return 0;}/*6 14 1 1 3 35 6*/

  

转载于:https://www.cnblogs.com/acmood/p/4537852.html

你可能感兴趣的文章
javascript keycode大全
查看>>
前台freemark获取后台的值
查看>>
log4j.properties的作用
查看>>
游戏偶感
查看>>
Leetcode: Unique Binary Search Trees II
查看>>
C++ FFLIB 之FFDB: 使用 Mysql&Sqlite 实现CRUD
查看>>
Spring-hibernate整合
查看>>
c++ map
查看>>
exit和return的区别
查看>>
discuz 常用脚本格式化数据
查看>>
洛谷P2777
查看>>
PHPStorm2017设置字体与设置浏览器访问
查看>>
Django 相关
查看>>
git init
查看>>
训练记录
查看>>
IList和DataSet性能差别 转自 http://blog.csdn.net/ilovemsdn/article/details/2954335
查看>>
Hive教程(1)
查看>>
第16周总结
查看>>
C#编程时应注意的性能处理
查看>>
Fragment
查看>>