1. 程式人生 > >2016.08.17【初中部 NOIP提高組 】模擬賽C

2016.08.17【初中部 NOIP提高組 】模擬賽C

這次考試還是失手了,第二題這種水題竟沒做出,只能怪自己智商還沒達到一個高度咯...

T1:

只需要對於所有顏色為白色的點進行一遍bfs即可.

T2:

很明顯,我們只需要對於每一個新安裝的基地進行一遍spfa,然後順便記錄當前所安裝的全部基地到一個點的最優值,如果這個最優值大於等於k就可以輸出.

T3:直接對每兩個點連一條邊,然後做一遍kruskal就行了.

T4:

先對樹進行一遍dfs,預處理出以每個點為根,其擁有的節點數量.

這個預處理呢,就可以先選定節點1作為整棵樹的根,然後從節點1開始往下遍歷,每次不能遍歷之前已經遍歷過的點,然後可以看出一個點的值很明顯就等於其擁有的兒子中每個兒子的值之和.

預處理完之後,直接列舉斷掉哪一個點,然後直接記錄斷掉這個點所產生的子樹的答案.

這裡子樹的答案很明顯分兩種情況,一種就是子樹的根是斷掉點的兒子,則直接加上子樹根的答案.

一種是子樹的根是斷掉點的父親,則直接用f[1]-f[i](f[i]表示以i為根所組成的樹當中的節點數量)

記錄答案之後直接判斷是否<=n div 2就行了.