51nod 猴猴的比賽

2021-09-29 08:16:55 字數 1642 閱讀 8266

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 節點...