日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

RMQ求LCA

發布時間:2024/9/21 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 RMQ求LCA 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目鏈接

rmq求LCA,interesting。

一直沒有學這玩意兒是因為CTSC的Day1T2,當時我打的樹剖LCA 65分,gxb打的rmq LCA 45分。。。

不過rmq理論復雜度還是小一點的,就學一下把。

RMQ求LCA

我們要用到三個數組

\(dfn[i]\):第\(i\)個節點位置的時間戳

\(id[i][j]\):在歐拉序中\(i\)\(i + 2^j - 1\)這段區間內深度最小的節點編號

\(dep[i]\):第\(i\)個節點的深度

實際上用到了一個性質:

對于任意兩點的\(LCA\),一定是它們歐拉序中兩點之間的最小值

歐拉序是什么?就是把dfs中遍歷到每一個一個節點(包括回溯時遍歷到)加到一個序列里,最終得到的就是歐拉序

時空復雜度

\(T = 2 * n - 1\)

時間復雜度:

預處理:\(O(TlogT)\)

查詢:\(O(1)\)

空間復雜度:

考慮歐拉序中有多少個點,首先每個點被訪問到的時候會做出\(1\)的貢獻

其次在遍歷每條邊時會多出\(1\)的共貢獻

因此總空間復雜度為:\(O(T)\)

// luogu-judger-enable-o2 #include<bits/stdc++.h> const int MAXN = 1e6 + 10; using namespace std; inline int read() {char c = getchar(); int x = 0, f = 1;while(c < '0' || c > '9') {if(c == '-') f = -1; c = getchar();}while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();return x * f; } int N, Q, S, tot, dfn[MAXN], rev[MAXN], dep[MAXN], id[MAXN][21], lg2[MAXN], rd[MAXN]; vector<int> v[MAXN]; void dfs(int x, int fa) {dfn[x] = ++tot; dep[x] = dep[fa] + 1; id[tot][0] = x; for(int i = 0, to; i < v[x].size(); i++) {if((to = v[x][i]) == fa) continue;dfs(to, x);id[++tot][0] = x;} } void RMQ() {for(int i = 2; i <= tot; i++) lg2[i] = lg2[i >> 1] + 1;for(int j = 1; j <= 20; j++) {for(int i = 1; (i + (1 << j) - 1) <= tot; i++) {int r = i + (1 << (j - 1));id[i][j] = dep[id[i][j - 1]] < dep[id[r][j - 1]] ? id[i][j - 1] : id[r][j - 1];}} } int Query(int l, int r) {if(l > r) swap(l, r);int k = lg2[r - l + 1];return dep[id[l][k]] < dep[id[r - (1 << k) + 1][k]] ? id[l][k] : id[r - (1 << k) + 1][k]; } int main() {freopen("a.in", "r", stdin);N = read(); Q = read(); S = read();for(int i = 1; i <= N - 1; i++) {int x = read(), y = read();v[x].push_back(y); v[y].push_back(x);}dfs(S, 0);RMQ();while(Q--) {int x = read(), y = read();printf("%d\n", Query(dfn[x], dfn[y]));}return 0; }

總結

以上是生活随笔為你收集整理的RMQ求LCA的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 严厉高冷老师动漫播放 | 婚后打屁股高h1v1调教 | 麻豆免费网站 | 老妇女av| 日本黄在线观看 | 日韩免费高清一区二区 | 国产精品成人免费视频 | 91精品成人| 国产jjizz一区二区三区视频 | 成人午夜福利一区二区 | 香蕉视频在线网址 | 国产老熟女伦老熟妇露脸 | 粉嫩av懂色av蜜臀av分享 | 狠狠躁夜夜躁 | 性欧美大战久久久久久久免费观看 | 国产精品99re| 国产精品免费精品一区 | 国产3区 | 丝袜视频在线观看 | 黄色a区 | 台湾佬美性中文娱乐 | 国产毛片在线看 | 手机成人在线视频 | 爱爱一区二区三区 | 亚洲日本不卡 | 免费看黄网址 | 先锋影音久久 | 天天超碰| 欧美一区二区三区大屁股撅起来 | 色人阁av | 黄色网址视频在线观看 | 欧美日本韩国在线 | а√在线中文网新版地址在线 | 亚洲国产精品欧美久久 | 97超碰人人爱| 国产一区二区网址 | 国产精品久久久久久久久久久久久久久久久 | 色吊妞 | 国产精品激情偷乱一区二区∴ | 第一福利视频 | 亚洲中文字幕97久久精品少妇 | 欧美1314| 成人av激情 | 国产视频1区2区3区 国产欧美一区二区精品性色99 | 黄毛片在线观看 | 亚洲成人一二三 | 99在线看| 国产精品s| 亚洲欧美福利 | 熟妇人妻久久中文字幕 | 男女激情在线观看 | 鬼灭之刃柱训练篇在线观看 | 久久尤物 | 黄a网站 | 高潮久久久 | 99re6热在线精品视频播放 | 亚洲情涩 | 日本在线一本 | 自拍视频第一页 | 狠狠插综合 | 亚洲超碰在线 | 免费av观看网址 | 欧美aaa大片| 欧美三级视频在线观看 | 久久亚洲av永久无码精品 | 综合欧美亚洲 | av九九九 | 日韩一区二区三区在线观看视频 | yes4444视频在线观看 | 就爱操av| av网站在线免费观看 | 筱田优av | 亚洲蜜桃视频 | 黑丝少妇喷水 | 国产成人综合精品 | 欧美日韩国产一区二区三区在线观看 | 91高清免费| 丰满少妇aaaaaa爰片毛片 | 羞羞成人 | 欧美性猛交xxx乱大交3 | 久久婷婷六月 | 日本亚洲色大成网站www久久 | 91学生片黄| 囯产精品久久久久久 | 久久久免费精品 | 免费黄av | 日韩欧美二区三区 | 国产成人精品午夜福利Av免费 | 欧美一区二区区 | 少妇三级全黄 | 高h喷水荡肉少妇爽多p视频 | 天堂一区在线 | aaa亚洲| 免费大片在线观看www | xxxwww18| 自拍偷拍免费 | 国产精品美女久久久 | 在哪里可以看黄色片 | 久久中文字幕精品 |