๋ฌธ์
ํ์ด
์ด์ฐจ์ ํธ๋ฆฌDP ๋ฌธ์ ๋ค.
DFS๊ธฐ๋ฐ์ผ๋ก ๋ฆฌํ๋ ธ๋๋ถํฐ ํ์ํด์ ์์ฐจ์ ์ผ๋ก ์ฌ๋ผ์ค๊ฒ ๋๋ค๋ฉด ์๊ฐ๋ณต์ก๋๋ O(N)์ด๋ค. ํ์์, ๊ฒ์์์ ๋ฐ๋ฅธ ์์ธ์ฒ๋ฆฌ๋ง ํด์ฃผ๋ฉด ๋๋ค.
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
long long n, wb[100001][2], dp[100001][2], chk, ans;
vector<vector<long long > > v(100001);
void solve(int node) {
if(v[node].empty()) {
dp[node][0] = wb[node][0];
dp[node][1] = wb[node][1];
return;
}
dp[node][0] = wb[node][0];
dp[node][1] = wb[node][1];
for(auto e : v[node]) {
solve(e);
dp[node][0] += min(dp[e][0], dp[e][1]);
dp[node][1] += dp[e][0];
}
}
int main() {
cin>>n;
for(int i=0; i<n-1; i++) {
int p, c; cin>>p>>c;
v[p].push_back(c);
}
for(int i=0; i<n; i++){
int w, b; cin>>w>>b;
wb[i][0] = w;
wb[i][1] = b;
}
solve(0);
cout<<min(dp[0][0], dp[0][1]);
}
'algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค 14848 (0) | 2024.08.02 |
---|---|
๋ฐฑ์ค 1953 (0) | 2024.08.01 |
๋ฐฑ์ค 22953 (0) | 2024.07.30 |
๋ฐฑ์ค 30704 (0) | 2024.07.30 |
๋ฐฑ์ค 16965 (0) | 2024.07.30 |