bzoj3697 採藥人的路徑

2021-08-11 18:12:00 字數 2782 閱讀 9524

description

採藥人的藥田是乙個樹狀結構,每條路徑上都種植著同種藥材。

採藥人以自己對藥材獨到的見解,對每種藥材進行了分類。大致分為兩類,一種是陰性的,一種是陽性的。

採藥人每天都要進行採藥活動。他選擇的路徑是很有講究的,他認為陰陽平衡是很重要的,所以他走的一定是兩種藥材數目相等的路徑。採藥工作是很辛苦的,所以他希望他選出的路徑中有乙個可以作為休息站的節點(不包括起點和終點),滿足起點到休息站和休息站到終點的路徑也是陰陽平衡的。他想知道他一共可以選擇多少種不同的路徑。

input第 1

行包含乙個整數 n。

接下來 n−

1 行,每行包含三個整數 ai

,bi,

ti,表示這條路上藥材的型別。

output

輸出符合採藥人要求的路徑數目。

sample input

7 1 2 0

3 1 1

2 4 0

5 2 0

6 3 1

5 7 1

sample output

hint

對於 100

% 的資料,n≤

100000

solution

本週點分治最後一刷!

如何判斷一條從根出發的路徑是否包含休息站?只要在 df

s 中記錄下這條路徑字首和

x ,同時用乙個桶判斷這條路徑是否存在字首和為

x的節點。 用 f

[i][

0...1

] 表示當前子樹不存在/存在休息站的長度為

i 路徑數目。 g[

i][0...1

]表示之前訪問過的子樹不存在/存在休息站的長度為

i 路徑數目。

那麼當前子樹的貢獻就是 f[

0][0

]∗g[

0][0

]+σf

[i][

0]∗g

[−i]

[1]+

f[i]

[1]∗

g[−i

][0]

+f[i

][1]

∗g[−

i][1

]。 其中 i∈[

−dep

,dep

] , de

p 為當前子樹的最大深度。

另外我寫的時候在 ge

troo

t 的時候寫錯了一些東西,於是

BZOJ3697 採藥人的路徑

給定一棵樹,找一些路徑滿足,路徑上0,1數量相等,並在路徑上找到乙個點 休息站 改點到路徑兩端上0,1數量也相等,同一條路徑點不同,記為不同,詢問有多少條路徑滿足條件 點分治 對於乙個點 u 我們遍歷每棵子樹中的節點 v,求出di s u,v 我們記錄這條路徑上有無節點 t 使得di s v,t 0...

bzoj3697 採藥人的路徑

這是個思路題,對我這樣的zz 來說可能已經接近自己想出來的極限了。一看統計符合條件的路徑條數,肯定是點分治,而且肯定是靜態的。首先把邊權變成 1 和 1 那麼一條路徑陰陽平衡也就是說它的權值和等於 0 根據點分治的過程,可知重心和路徑是一對多的關係,而且一條路徑只會對應乙個重心,就是說每條路徑都只會...

bzoj3697 採藥人的路徑 點分治

一道拖了很久的點分治,現在把他搞定了。來自出題人hta的題解 本題可以考慮樹的點分治。問題就變成求過根滿足條件的路徑數。路徑上的休息站一定是在起點到根的路徑上,或者根到終點的路徑上。如何判斷一條從根出發的路徑是否包含休息站?只要在dfs中記錄下這條路徑的和x,同時用個標誌陣列判斷這條路徑是否存在字首...