思路: 換根法, 首先因為葉子節點要定義為正無窮,所以選乙個不是葉子節點的根
開始dfs即可,然後考慮父節點更新子節點,對於非葉子節點v 首先cnt[v]就是下半部分的答案
考慮上半部分的答案 可以通過 u的dp[u] 來得到, 只需要減去u流向v的貢獻,再和這條邊取個min
即是 v向上流到u的貢獻
1 #include2view codeusing
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 }
換根法有兩種考慮方式 一是考慮 當前要更新的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...