輸入的第一行包含兩個整數n和m,(2≤n≤1000,n-1≤m≤5000),分別表示城市和道路的個數。 接下來的m行每行包含3個整數a, b和c(1≤a≤n, 1≤b≤n, 0≤c≤10 000), 用來描述一條道路。a和b是不同的整數,表示由這條道路直接相連的兩個城市。對於鋪設好的道路c是0;對於土路,c是在該條路上設定路障所需的費用值。 每個城市最多是10條道路的端點。任意兩個城市都不會有多於一條直接相連的道路。
輸出包含乙個整數,表示求出的最小總費用。
5 8
2 1 0
3 2 0
4 3 0
5 4 0
1 3 2
3 5 2
2 4 5
2 5 1
5 首先如果一條邊的兩個點在樹上的路徑長度為奇數,那麼這條邊肯定要刪掉。
那麼我們可以發現,這時存在偶環的充要條件就是乙個環經過了任意兩條非樹邊。
因為兩個奇環通過公共邊拼在一起,再把公共邊挖掉,肯定是乙個偶環。
所以這道題的限制就是不能出現這種情況,也就是說我們需要留下一棵仙人掌。
轉化一下,改為求總邊權減去最大留下的邊權
於是定義$f[i][s]$表示i點,不考慮s集合的兒子
對於乙個以i為lca的非樹邊,如果都不留
那麼$f[i][s]=∑f[son][0]*[s不含son]$
如果要選擇邊(u,v),那麼u->i和v->i上不能與其他非樹邊形成的環有公共邊
答案由三部分組成:
1.u和v的子樹,無限制,取$f[u][0]$,$f[v][0]$
2.u(或v)->i路徑上求出每個點不考慮它到u(或v)的兒子的方案和
$\sum_f[a][s]$
s為不考慮該點到u(或v)
3.i點不考慮到u的兒子son1,到v的兒子son2
$f[i][s]$ s為沒有考慮son1和son2的狀態
複雜度$o(m*2^+m*n)$
IOI 2007 Sail 線段樹 貪心
題意 有一艘船,船上有 n 個旗桿,每個旗桿上有 h i 個小節。每根旗桿上會掛 k i 張帆 每個小節最多掛乙個帆。在風中,帆的不同排布方式會產生不同的推動力 對於任意一張帆,他的推動力折扣等於再它後面並且和它在同一高度的帆的數目 所有帆的任意一種位置組合的推動力折扣和等於在該位置下所有帆的推動力...
IOI2007 D1T1 Miners 礦工配餐
題目大意 有 2 個煤礦,n 天。每天給乙個煤礦送餐 共有有 3 種餐 價值為它與前面兩次送餐 如果有的話 不同的種類數。最大化價值。題解 看到只有三種餐,考慮狀壓 dp f 表示現在是第 i 天,第乙個煤礦上一次為 j 再上一次為 k 沒有為 0 l,m 同理。calc a,b,c 為求出這三個數...
程式設計訓練 不同路徑I和不同路徑II(C )
不同路徑ii 乙個機械人位於乙個 m x n 網格的左上角 起始點在下圖中標記為 start 機械人每次只能向下或者向右移動一步。機械人試圖達到網格的右下角 在下圖中標記為 finish 問總共有多少條不同的路徑?例如,上圖是乙個7 x 3 的網格。有多少可能的路徑?示例 1 輸入 m 3,n 2 ...