2024省選OIFC模擬T1

wuhupai發表於2024-04-18

題意:

給定k顆有n個點的樹對於每個點對 (i,j),求出其在每棵樹上的路徑經過的點(含端點)的並集大小。

做法:

一個比較簡單的想法是搞出每個(i,j)在第k顆樹上的點的集合,然後所有樹並一下,這個再用bitset最佳化一下,然後有人就過了,而我這位大常數選手就沒過

首先容斥為求不經過點的交。考慮路徑(i,j)如果對於一個點x,在第k顆樹中,(i,j)沒有包含x,然後i,j應該在以x為根的樹的同一棵子樹中。那如果我們列舉一個點,如果這個點在所有樹中,有一個不滿足i,j應該在以x為根的樹的同一棵子樹中這個條件的話,那麼這個點就會被計算進貢獻裡。考慮如何加速,如果我們們對每一棵子樹都賦一個隨機權值,如果以x為根的i所在的子樹權值之和等於以x為根的j所在的子樹權值之和,那麼這個點就不應該被算進去,然後就做完了

相關文章