77C - Beavermuncher-0xFF - CodeForces Solution


dfs and similar dp dsu greedy trees *2100

Please click on ads to support us..

C++ Code:

#include<bits/stdc++.h>
#define int long long
#define M 100005
using namespace std;
int k[M], a[M];
vector<int> g[M];
int s;

inline void dfs(int u, int f) {
    if (u != s) {
        k[u]--;
        a[u] = 2;
    }
    vector<int> son;
    son.clear();
    int cnt = 0;
    for (int v : g[u]) {
        if (v == f)
            continue;
        dfs(v, u);
        cnt += k[v];
        son.push_back(a[v]);
    }
    sort(son.rbegin(), son.rend());
    for (int i = 0; i < son.size() && k[u]; i++) {
        a[u] += son[i];
        k[u]--;
    }
    a[u] += 2 * min(k[u], cnt);
    k[u] -= min(k[u], cnt);
    return;
}

signed main() {
	ios::sync_with_stdio(false);
	cin.tie(nullptr), cout.tie(nullptr);
    int n;
    cin >> n;
    for (int i = 1; i <= n; i++) cin >> k[i];
    for (int i = 1; i < n; i++) {
        int a, b;
        cin >> a >> b;
        g[a].push_back(b);
        g[b].push_back(a);
    }
    cin >> s;
    dfs(s, 0);
    cout << a[s] << endl;
    return 0;
}//1758490611307803121


Comments

Submit
0 Comments
More Questions

67A - Partial Teacher
116A - Tram
1472B - Fair Division
1281C - Cut and Paste
141A - Amusing Joke
112A - Petya and Strings
677A - Vanya and Fence
1621A - Stable Arrangement of Rooks
472A - Design Tutorial Learn from Math
1368A - C+=
450A - Jzzhu and Children
546A - Soldier and Bananas
32B - Borze
1651B - Prove Him Wrong
381A - Sereja and Dima
41A - Translation
1559A - Mocha and Math
832A - Sasha and Sticks
292B - Network Topology
1339A - Filling Diamonds
910A - The Way to Home
617A - Elephant
48A - Rock-paper-scissors
294A - Shaass and Oskols
1213A - Chips Moving
490A - Team Olympiad
233A - Perfect Permutation
1360A - Minimal Square
467A - George and Accommodation
893C - Rumor