t1:首先有乙個結論:每次肯定都是把權值最大的點周圍還沒有刪的邊都刪掉,這個很好證。
然後可以把刪邊變成加邊,接著用並查集維護;同時也可以直接用公式:ans=sum(a[i])-max(a[i])+sum(a[x[i]],a[y[i]])。這條公式的意義是除了最大值點之外的每乙個點都會在作為某個最大值點被刪之後某棵子樹的最大值計算一次,這就是sum(a[i])-max(a[i]),而每次刪去一條邊還會計算一次這條邊連線的兩個點中權值較大的乙個,這就是sum(a[x[i]],a[y[i]])。
比賽時想到了第一條性質,但是沒想到接下來怎樣處理。
t2:n^2的做法很好想,就是分類討論刪的兩條邊是否具有祖孫關係。
接著在n^2的基礎上優化。我們dfs一遍整棵樹,每次進乙個點時把它的siz[x]加入線段樹f1,出來時把它的siz[x]從f1中刪去,再把它加入線段樹f2。這樣我們就維護除了和它有祖孫關係的集合(f1)以及和它沒有祖孫關係的集合(f2)。
2020 11 30 NOIP提高A組 模擬賽反思
90,rk42 考試的時候覺得可以貪心,就每次找到最大的,然後以它為根去遍歷每個子樹,求出其最大值,然後刪去這個點。一直持續直到邊刪完,時間複雜度 o n 2 然後想了想鏈的情況,沒有打 得分 tle40 正解是結論題,答案是 sum t i max sum max t t 證明仍在思考 比賽時想著...
NOIP提高 通訊
tarjan縮點 互相到達的兩個點,就是在同乙個強連通分量裡面的點的邊權都沒有用了。那麼明顯可以用tarjan來縮點。需要串上n個點 那麼這個東西很像乙個最小生成樹,可惜不是。那麼我們另闢蹊徑。既然要保證每個點都在的出的圖中,那麼最優的方案就只有n 1條邊,那麼每個除了1號點只需要有一條邊練過來就好...
NOIP提高 錢倉
比賽的時候看錯題目了,還以為是這個錢可以向兩邊流,結果,樣例怎麼不對啊!原來錢,只能向後流tat 貪心 那麼直接貪心就好了。每個錢為0的點,因為是單方向流動的,所以肯定是最近的那個點流過來的。所以先找出乙個合法的初始節點,滿足每個零都會被前面的點填滿。維護每乙個非零的點的左邊乙個非零的點,其實每次暴...