|
@@ -15,10 +15,12 @@ const int N = 200000;
|
|
// for j in sub(i),
|
|
// for j in sub(i),
|
|
// dp[i] = dp[i] + cap(i, j), if deg(j) == 1
|
|
// dp[i] = dp[i] + cap(i, j), if deg(j) == 1
|
|
// = dp[i] + min(cap(i, j), dp[j]), if deg(j) > 1
|
|
// = dp[i] + min(cap(i, j), dp[j]), if deg(j) > 1
|
|
|
|
+// (init state: dp[i] = 0)
|
|
// In [top-down dfs], we have:
|
|
// In [top-down dfs], we have:
|
|
// for j in sub(i),
|
|
// for j in sub(i),
|
|
// dp[j] = dp[j] + cap(i, j), if deg(i) == 1
|
|
// dp[j] = dp[j] + cap(i, j), if deg(i) == 1
|
|
// = dp[j] + min(cap(i, j) , dp[i] - min(cap(i, j), dp[j])), if deg(i) > 1
|
|
// = dp[j] + min(cap(i, j) , dp[i] - min(cap(i, j), dp[j])), if deg(i) > 1
|
|
|
|
+// init state: dp[root] = dp[root]
|
|
int dp[N + 1];
|
|
int dp[N + 1];
|
|
|
|
|
|
vector<pair<int, int> > adj[N + 1];
|
|
vector<pair<int, int> > adj[N + 1];
|