已知一棵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...