287 積蓄程度

2022-06-18 15:30:13 字數 1170 閱讀 6966

思路: 換根法, 首先因為葉子節點要定義為正無窮,所以選乙個不是葉子節點的根

開始dfs即可,然後考慮父節點更新子節點,對於非葉子節點v 首先cnt[v]就是下半部分的答案

考慮上半部分的答案 可以通過 u的dp[u] 來得到, 只需要減去u流向v的貢獻,再和這條邊取個min

即是 v向上流到u的貢獻

1 #include2

using

namespace

std;

3const

int maxn=2e5+10;4

const

int mod=998244353;5

#define ll long long

6#define ull unsigned long long

7#define pi pair8

#define fi first

9#define sc second

10#define pb push_back

11 vectore[maxn];

12ll cnt[maxn];

13ll dp[maxn];

1415

void dfs(int u,int

fa)1625}

2627

void dfs22(int u,int

fa)28

36else

3741}42

}434445

intmain()

46);

61e[v].pb();62}

63int rt=1;64

while(rt<=n&&e[rt].size()==1) rt++;

65if(rt==n+1)66

70 dfs(rt,0

);71 dp[rt]=cnt[rt];

72 dfs22(rt,0

);73 ll ans=0;74

for(int i=1;i<=n;i++) ans=max(ans,dp[i]);

75 cout

;76}77

78 }

view code

換根法有兩種考慮方式 一是考慮 當前要更新的v 分為上下部分來更新

二是考慮 v和u 的答案有什麼不同來更新

Acwing 287 積蓄程度 (樹形DP換根)

有乙個樹形的水系,由 n 1 條河道和 n 個交叉點組成。我們可以把交叉點看作樹中的節點,編號為 1 n,河道則看作樹中的無向邊。每條河道都有乙個容量,連線 x 與 y 的河道的容量記為 c x,y 河道中單位時間流過的水量不能超過河道的容量。有乙個節點是整個水系的發源地,可以源源不斷地流出水,我們...

教育程度用詞

education 學歷 educational url background url 教育程度 educational url history url 學歷 curriculum 課程 major 主修 minor 副修 educational url highlights url 課程重點部分 ...

bug程度分析

此欄位描述 bug 的嚴重等級。blocker,critical,major,normal,minor,trivial,enhancement blocker 會擋掉所有開發中 測試中的工作 critical 系統發生 crash 資料遺失 嚴重的記憶體流失 major 功能出現較大型的問題 nor...