如下 \(n\le 10^5\)spa
給你一棵樹,求出這棵樹全部子樹的重心。code
樹的重心性質:遊戲
在dfs的過程當中,咱們利用性質一、2,設當前節點爲 \(u\) , \(u\) 的其中一個子節點爲 \(v\) ,若是 \(v\) 的子樹大小超過了 \(u\) 的一半,那麼 \(u\) 的子樹的重心必定在 \(u\) 和 \(v\) 的子樹重心的連線上,咱們從 \(v\) 的子樹重心暴力往上跳,每次檢驗是否合法便可。class
給你一棵樹和若干對節點,問對於樹的每條邊,有多少對節點間的路徑通過它。gc
對於每一對點,在這兩個點上打上+1標記,在它們的lca上打上-2標記,最後用樹上差分查詢。統計
定義一個節點的美麗值爲從它到根的路徑上的全部點的點權的gcd。有若干個詢問,詢問節點最大可能的美麗值。對於每一個詢問,你能將樹中某一個節點的點權改成0。\(gcd(a,0)=a\)。根節點美麗值爲其點權。
點權 \(\le 10^5\) 。查詢
咱們發現點權不大,因而在dfs下去的過程當中,咱們維護目前掃過的點的全部因子出現的次數。
設當前節點深度爲 \(d\) ,根節點深度爲0。
在尋找當前數的因子的過程當中,若是有一個因子出現次數 \(≥d\) ,那麼這個因子必然就是當前節點的答案之一。
另外,還要考慮不選當前節點的狀況。
這樣能保證複雜度爲 \(O(n\sqrt{n})\) 。移動
有A,B兩我的在一棵樹上van,A位於1節點,B位於x節點,B先手,每一次A,B能夠移動到相鄰的節點,也能夠不動。當A,B相遇時遊戲結束。如今A想要最小化遊戲次數,B想要最大化遊戲次數。輸出最終的遊戲次數。di
找到知足 \(disB[u]<disA[u]\) 且 \(disA[u]\) 最大的節點便可。co
定義一個節點 \(v\) 是傷心的,若是它的子樹中存在一個節點 \(u\) ,使得 \(dis(v,u)>a[u]\) ,其中 \(a[u]\) 爲 \(u\) 的點權, \(dis(v,u)\) 爲從 \(v\) 到 \(u\) 路徑上的邊權和。如今你能夠進行若干次操做,每次能夠刪除當前樹中的一個葉節點,問最少刪除幾個節點能使樹中沒有一個節點是傷心的。
對於一個節點 \(u\) ,若是它到根節點的路徑上的某一段邊權後綴和大於它的點權,那麼這個節點必然會使某一個節點傷心,刪除這個節點。dp弄一下。
有一本魔書在一棵樹的一個節點上,這棵樹上與它距離不超過 \(d\) 的點會被影響。如今告訴你目前發現已經被影響到的點(可能還有一些點也被影響,但沒有告訴你),請你判斷魔書有多少種可能的位置。沒有輸出0。
找到距離最遠的兩個被影響到的點,計算有多少個點到它們的距離 \(\le d\) 。
給你一棵樹,要給每一個節點染色,要求任意相鄰的三個節點不能是相同的顏色。問最少使用幾種顏色。
對於每一個節點,顏色從1開始++,若是該顏色使用過就跳過。
一棵樹,問對於全部的節點,它們各自能控制多少個節點。
節點 \(v\) 能控制節點 \(u\) ,當 \(u\) 在 \(v\) 的子樹中,且 \(dis(v,u)>a[u]\) ,其中 \(a[u]\) 爲 \(u\) 的點權, \(dis(v,u)\) 爲從 \(v\) 到 \(u\) 路徑上的邊權和。
咱們發現,對於一個節點 \(u\) ,能控制它的節點一定是它到根節點路徑上的點的一個後綴。因此掃到一個節點 \(u\) 時,咱們二分一個節點 \(v\) ,使 \(v\) 是深度最小的能控制 \(u\) 的節點,而後用樹上差分將從 \(v\) 到 \(u\) 的父親的全部節點都+1,最後統計每一個節點加了幾回。
一棵樹,第 \(i\) 個節點的點權爲 \(2^i\) ,如今能夠進行 \(k\) 次操做,每次能夠刪除當前樹的一個葉節點,要最大化剩下節點的點權和。問應該刪除哪些節點。
首先考慮貪心,由於前 \(i-1\) 個節點的點權加起來還沒第 \(i\) 個節點的點權大。
咱們不妨設根節點爲 \(n\) 號節點,而後從大到小枚舉其餘節點,每次檢驗當前節點是否能保留。若是當前節點要保留,那麼它的全部祖先也要保留。然而,保留的節點個數不能超過 \(n-k\) 個。 怎麼統計當前要保留的節點個數?因爲保留的節點是單調的,因此用倍增找到第一個未被標記爲保留的節點,它到當前節點的距離+1就是須要保留的節點個數。