【2018ICPC青島】

Bui

題意:給n個問題,每一個問題有一個固定的答案ai(<=10^5).如今有m個約束關係,每一個約束關係是一個二元組(ui,vi),表示你回答ui、vi問題的答案必須同樣。內存

如今讓你輸出分別修復一個約束,而後回答每一個問題,最多能答對多少道。vi

分析:約束關係實際上是弱聯通關係,要求回答每一個聯通塊是同樣的。因此建一個圖。tar

而後考慮拆掉一個約束關係(一條邊),能夠發現若是處在一個強連通份量內,拆掉對答案沒有影響。因此先tarjan縮編而後重建樹。

如果一條橋邊,那麼就是把樹拆成多個部分,更新答案。

具體我想能夠經過dsu(長鏈剖分啊,重鏈剖分啊,把答案先存在重心上分治),或者經過樹上的線段樹合併(不知道內存會不會炸)。

線段樹合併的作法:對那個聯通塊的根rt,fa(vi)=ui,更新答案能夠 = tree(rt)-tree(ui) 和tree(ui)-tree(vi)-val(ui) 和tree(vi) - val (ui) 。

 

 

E

題意:有n棵植物從1到n,初始能力值都爲0,還有個成長值ai。有個機器人,初始在0,若是機器人走到i,那麼i植物能力值加上ai,如今給出機器人的活動步數m(<=10^12),求使得全部植物能力值最小值最大的值。

分析:二分答案,而後轉化爲每一個植物至少要走ki次,判斷是否能知足。聽說從左到右貪心就能夠了。

相關文章
相關標籤/搜索