在loj做的第一道題。
最開始想複雜了qwq 想的是在求lca的過程中統計向上的步數
其實此題很裸……就是求出u,v的lca,
再分別用兩點深度減去lca的深度,再加起來就好了qwq
---化簡---
\(dep[u]+dep[v]-2*dep[lca(u,v)]\)
#include #include #include #include #include #define maxn 100005
using namespace std;
struct qwq
;int tot=0,dep[maxn],fa[maxn][20],lg[maxn],h[maxn],n,m;
qwq e[maxn<<1];
inline void add(int x,int y)
void dfs(int f,int fat) }}
int lca(int x,int y)
if (x==y)
for (int i=lg[dep[x]-1];i>=0;i--) }
return fa[x][0];
}int maxn=-10;
inline void init()
for (int i=1;i<=n;i++)
dfs(maxn,0);
scanf("%d",&m);
for (int i=1,x,y;i<=m;i++) }
int main()
lca 點的距離
給定一棵有n個結點的樹,q個詢問,每次詢問點x到點y亮點之間的距離 第一行乙個n,表示有n個節。接下來有n 1行,每行2個整數x,y表示x,y之間有一條連邊。然後乙個整數q,表示有q次詢問,接下來q行每行2個整數x,y表示詢問x到y的距離。輸出q行,每行表示每個詢問的結果 6 1 21 3 2 42...
問題 G 點的距離
問題 g 點的距離 時間限制 5 sec 記憶體限制 128 mb 提交 57 解決 19 提交 狀態 討論版 命題人 add lm edit testdata 題目描述 給定一棵有 n個結點的樹,q個詢問,每次詢問點x到點 y亮點之間的距離 輸入 第一行乙個 n,表示有 n個節。接下來有 n 1行...
儲物點的距離
看似是一道劃分樹的題目,但是因為沒有修改操作,我們直接字首和即可。我們用字首和維護區間的物品總數,以及維護區間物品全部移動到第乙個點的花費。然後就根據 l,r,x之間的關係,推一推式子就行了。ac include define int long long using namespace std co...