175862025-08-05 06:29:16peti1234Experiencecpp17Elfogadva 100/100104ms28440 KiB
#include <bits/stdc++.h>
using namespace std;
const int c=500005, inf=2e9;
int n;
long long dp[c][3], ert[c], o;
vector<int> sz[c];
bool v[c];

void dfs(int a) {
    v[a]=true;
    long long kis=-inf, nagy=-inf, sum=0;
    for (auto x:sz[a]) {
        if (!v[x]) {
            dfs(x);
            sum+=dp[x][0];
            kis=max(kis, dp[x][1]-dp[x][0]);
            nagy=max(nagy, dp[x][2]-dp[x][0]);
        }
    }
    dp[a][1]=sum+max(-ert[a], kis);
    dp[a][2]=sum+max(ert[a], nagy);
    dp[a][0]=sum+max({o, kis+ert[a], nagy-ert[a]});
}

int main() {
	ios_base::sync_with_stdio(false);
    cin >> n;
    for (int i=1; i<=n; i++) {
        cin >> ert[i];
    }
    for (int i=1; i<n; i++) {
        int a, b;
        cin >> a >> b;
        sz[a].push_back(b), sz[b].push_back(a);
    }
    dfs(1);

    cout << dp[1][0] << "\n";
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask120/20
1Elfogadva10/1012ms12088 KiB
2Elfogadva10/109ms12084 KiB
subtask230/30
1Elfogadva5/516ms12596 KiB
2Elfogadva5/516ms12540 KiB
3Elfogadva5/513ms12544 KiB
4Elfogadva5/514ms12852 KiB
5Elfogadva5/513ms13044 KiB
6Elfogadva5/514ms12436 KiB
subtask350/50
1Elfogadva5/582ms20748 KiB
2Elfogadva5/572ms28440 KiB
3Elfogadva5/5101ms27344 KiB
4Elfogadva5/574ms20616 KiB
5Elfogadva5/590ms20672 KiB
6Elfogadva5/575ms24420 KiB
7Elfogadva5/578ms22836 KiB
8Elfogadva5/5104ms24336 KiB
9Elfogadva5/582ms24116 KiB
10Elfogadva5/582ms24412 KiB