h yp
erli
nk
hyperlink
hyperl
ink
d es
crip
tion
description
descri
ptio
n 給定兩棵樹,求在兩棵樹同時滿足u
uu是v
vv的父親的對數
資料範圍:n≤1
05
n\leq 10^5
n≤105sol
utio
nsolution
soluti
on首先求出在樹1的dfs
dfsdf
s序以及siz
sizsi
z大小(或者結束遞迴的位置ed[
i]
ed[i]
ed[i],ed[
i]=d
fn[i
]+si
z[i]
ed[i]=dfn[i]+siz[i]
ed[i]=
dfn[
i]+s
iz[i
],可以相互轉換)
然後在樹2中查詢[1∼
dfn[
x−n]
][1\sim dfn[x-n]]
[1∼dfn
[x−n
]]中的數的個數即可(用樹狀陣列維護)
時間複雜度:o(n
logn
)o(nlogn)
o(nlog
n) cod
ecode
code
#include
#include
#include
#define n 200010
#define ll long long
#define lb(x) x&-x
using
namespace std;
int l[n]
,tot,n,k,c[n]
,siz[n]
,dfn[n]
;struct nodee[n<<1]
;inline
void
mdi(
int x,
int d)
inline
intask
(int x)
inline
void
add(
int u,
int v)
;l[u]
=tot;
return;}
ll ans;
inline ll read()
inline
void
dfs1
(int x,
int fa=-1
)return;}
inline
void
dfs2
(int x,
int fa=-1
)mdi
(dfn[x-n],-
1);mdi
(dfn[x-n]
+siz[x-n],1
);return;}
signed
main()
51nod 猴猴吃香蕉 揹包
猴猴最愛吃香蕉了。每天猴猴出門都會摘很多很多的香蕉,每個香蕉都有乙個甜度,猴猴不一定要把所有的香蕉都吃掉,猴猴每天都有乙個心情值k,猴猴希望當天吃的香蕉滿足這麼乙個條件,這些香蕉的甜度乘積恰好等於k,但是猴猴並不知道有多少種方法,於是猴猴把這個問題交給你。m 1 08 m leq 10 8 m 10...
51nod 猴猴吃蘋果 樹鏈剖分
這道題有dfs dfs的解法。我真是遇樹就剖絕了。線段樹記錄每乙個節點到根節點的距離dep i d ep i 每次選取dep dep最大點x x的來轉移。然後把roo troo t到xx的路徑上所有點p p的子樹的dep dep全部減一,因為這個子樹中每乙個點到根的距離都相當於只要到p p即可。拿樣...
11 02 猴猴的比賽
猴猴今天要和小夥伴猩猩比賽爬樹,為了公平不碰撞,猴猴和猩猩需要在不同的樹上攀爬。於是它們選了兩顆節點數同為n的樹,並將兩棵樹的節點分別以1 n標號 根節點標號為1 但兩棵樹的節點連線方式不盡相同。現在它們決定選擇兩個標號的點進行比賽。為了方便統計,規定它們比賽中必須都向上爬。即選定的賽段節點u 節點...