題意
作爲瑞瓦肖57分局最優秀的警探,你被派到馬丁內斯打擊犯罪。馬丁內斯的一些建築物上安裝了個攝像頭。你明白,普通人並不會因此受到多少保護,這些攝像頭是保護*資本主義*的。作爲一個信仰共產主義的戰士,你決定濫用職權,拆掉一些攝像頭。馬丁內斯的街道是一棵個點的有根樹,每個點是一個商店,豪宅之類的重要建築物,建築物之間的邊就是街道,一個攝像頭可以監控子樹中所有和它的距離的建築物。拆一個攝像頭是不小的勞動,會減少的快樂度。而一個毫無監視的重要建築物會給予你的快樂度。你想知道,你最大能獲得多少快樂度。
數據點 | n,m | 性質 |
---|---|---|
1,2 | ||
3,4,5,6 | ||
7,8,9 | ||
10,11 | ||
12,13,14,15,16 | $ \leq 10^5$ | |
17,18,19,20 |
題解
原本只會DP,設爲子樹內前層不考慮的最大價值,對於的子樹,枚舉一個距離之外的監控被拆除,加上子樹的DP值,效率。但這個DP用長剖或線段樹合併都難以優化,有一種比較大力的拆開分討+線段樹合併的做法,但顯然不太適合我。
“這不就是模擬費用流板子嗎”——slz
發現這有一個比較顯然的最小割建圖,先取所有點權,把起點與監控連監控價值的邊,樹上節點與終點連點權的邊,有控制關係的監控和樹上節點連正無窮的邊,跑最大流減掉即可。考慮如何使流量最大,按照從後代到祖先的關係考慮每一個監控,那麼該監控肯定要從有連邊的節點中深度最大的開始選要選取,於是直接dfs時維護子樹內以深度爲下標的殘餘流量的線段樹,在每個節點上計算答案併合並子樹點的線段樹即可。