祖孫詢問 紀中3054 lca

2021-07-22 09:09:32 字數 845 閱讀 5366

已知一棵n個節點的有根樹。有m個詢問。每個詢問給出了一對節點的編號x和y,詢問x與y的祖孫關係。

輸入第一行包括乙個整數n表示節點個數。

接下來n行每行一對整數對a和b表示a和b之間有連邊。如果b是-1,那麼a就是樹的根。

第n+2行是乙個整數m表示詢問個數。

接下來m行,每行兩個正整數x和y。

對於每乙個詢問,輸出1:如果x是y的祖先,輸出2:如果y是x的祖先,否則輸出0。

對於100%的.據,n,m≤40000,每個節點的編號都不超過40000。

赤裸裸的lca,陣列開小我的鍋,我的鍋

#include 

#include

using

namespace

std;

struct edge

;bool v[80501];

edge e[80501],g[80501];

int ans[80501],lse[80501],lsg[80501],f[80501];

int maxg,maxe;

int find(int x)

void dfs(int x)

}int main()

; lse[y]=maxe;}}

scanf("%d",&m);

for (int i=1;i<=m;i++)

;lsg[x]=maxg;

g[++maxg]=(edge);

lsg[y]=maxg;

}dfs(root);

for (int i=1;i<=m;i++)

return

0;}

JZ3054祖孫詢問

題目 已知一棵n個節點的有根樹。有m個詢問。每個詢問給出了一對節點的編號x和y,詢問x與y的祖孫關係。分析 dfs序以及各種求lca演算法均可秒殺此題。dfs遍歷樹,記錄每個點x的第一次訪問時間st x 和最後一次訪問時間ed x 若y在以x為根的子樹中,則一定有st x 附上 const maxn...

AcWing 1172 祖孫詢問(lca)

給定一棵包含 n 個節點的有根無向樹,節點編號互不相同,但不一定是 1 n。有 m 個詢問,每個詢問給出了一對節點的編號 x 和 y,詢問 x 與 y 的祖孫關係。輸入第一行包括乙個整數 表示節點個數 接下來 n 行每行一對整數 a 和 b,表示 a 和 b 之間有一條無向邊。如果 b 是 1,那麼...

祖孫詢問 (lca或dfs序 時間戳)

時間限制 1 sec 記憶體限制 128 mb 提交 13 解決 6 難度 提高 省選 提交 狀態 討論版 命題人 xcgzjia 題目描述 輸入輸出 樣例輸入 copy 10 234 1 12 234 13 234 14 234 15 234 16 234 17 234 18 234 19 234...