algorithm

๋ฐฑ์ค€ 25690

rkawk 2024. 7. 31. 22:15

๋ฌธ์ œ

ํ’€์ด

์ด์ฐจ์› ํŠธ๋ฆฌ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