2019 10 01日常總結

2021-09-27 13:22:25 字數 2303 閱讀 1239

【前言】:今天是祖國母親70歲生日,請允許我向祖國母親說一聲:「生日快樂!願您永遠繁榮昌盛、山清水秀!」

【題意】:松鼠的新家是一棵樹,前幾天剛剛裝修了新家,新家有n

nn個房間,並且有n−1

n-1n−

1根樹枝連線,每個房間都可以相互到達,且倆個房間之間的路線都是唯一的。天哪,他居然真的住在」樹「上。

松鼠想邀請小熊維尼前來參觀,並且還指定乙份參觀指南,他希望維尼能夠按照他的指南順序,先去a

1a_1

a1​,再去a

2a_2

a2​,…,最後到a

na_n

an​,去參觀新家。可是這樣會導致維尼重複走很多房間,懶惰的維尼不停地推辭。可是松鼠告訴他,每走到乙個房間,他就可以從房間拿一塊糖果吃。

維尼是個饞傢伙,立馬就答應了。現在松鼠希望知道為了保證維尼有糖果吃,他需要在每乙個房間各放至少多少個糖果。

因為松鼠參觀指南上的最後乙個房間a

na_n

an​是餐廳,餐廳裡他準備了豐盛的大餐,所以當維尼在參觀的最後到達餐廳時就不需要再拿糖果吃了。

【思路】:考慮到n

nn比較大(1≤n

≤3×1

05

1 \leq n \leq 3 \times 10^5

1≤n≤3×

105),不能直接暴力,所以我們考慮用樹上差分演算法。

注意,我們不能對邊差分,只能對點差分,即對於路徑(x,

y)

(x,y)

(x,y

)上所有點的經過次數+1+1

+1,則進行以下幾步(f

ff為差分陣列):f[x

]++,

f[y]

++,f

[lca

(x,y

)]−−

,f[f

a(lc

a(x,

y))]

−−

f[x]++,f[y]++,f[lca(x,y)]--,f[fa(lca(x,y))]--

f[x]++

,f[y

]++,

f[lc

a(x,

y)]−

−,f[

fa(l

ca(x

,y))

]−−【**】:

#include

using

namespace std;

const

int n=

301000

;struct nodee[n<<1]

;int h[n]

,tot;

inline

void

add(

int a,

int b)

;h[a]

=tot;

e[++tot]

=(node)

;h[b]

=tot;

}//鏈式前向星

#define gc getchar()

#define g(c) isdigit(c)

inline

intread()

//讀入優化的模板

int f[n][22

],dep[n]

;void

dfs_init

(int u,

int fa)

}inline

intlca

(int x,

int y)

if(x==y)

return x;

for(

int i=

20;i>=

0;i--)if

(f[x]

[i]!=f[y]

[i])

return f[x][0

];}int dp[n]

;void

get_answer

(int u)

}int n,x,y,i,a[n]

;int

main()

get_answer(1

);for(i=

2;i<=n;i++

) dp[a[i]]--

;//注意這裡哦

for(i=

1;i)printf

("%d\n"

,dp[i]);

printf

("%d"

,dp[n]);

return0;

}

2019 08 18 日常總結

一本通1599 題意 在一年前贏得了小鎮的最佳草坪比賽後,fj 變得很懶,再也沒有修剪過草坪。現在,新一輪的最佳草坪比賽又開始了,fj 希望能夠再次奪冠。然而,fj 的草坪非常髒亂,因此,fj 只能夠讓他的奶牛來完成這項工作。fj 有 nn 只排成一排的奶牛,編號為 11 到 nn。每只奶牛的效率是...

5059日常總結

1.乙個函式的形參是const char 實參是可以是char 如果乙個函式的返回值是const char 不能用char 來接收返回值 2.為什麼沒有靜態的建構函式和析構函式?建構函式成員函式使用現有分配構造指定的物件 即存在this。static成員函式指定物件沒有儲存,因此沒有關聯的例項要構造...

2019 12 07日常總結

在昨天的日記裡,我們粗略的談了談二分。今天,我們來講講二分的乙個分支 二分答案。從巨集觀的角度來講,二分答案分為整數二分和實數二分。二者的區別就是二分的區間是整數還是實數而已。整數二分是二分答案的基礎,其形式多樣且較為簡單。下面以最小值最大為例,推薦一種筆者覺得很好的方法。while l r els...