/ SeriousOJ /

Record Detail

Wrong Answer


  
# Status Time Cost Memory Cost
#1 Accepted 13ms 14.27 MiB
#2 Wrong Answer 62ms 14.379 MiB
#3 Wrong Answer 60ms 14.273 MiB

Code

/*If we keep holding onto yesterday, what are we going to be tomorrow?*/

#include<bits/stdc++.h>
using namespace std;
using ll = long long;

const int N = 200005;
vector<array<int, 2>>g[N];
long long d[N], w[N], ryo[N];
long long ans = LLONG_MIN;
map<pair<int, int>, bool>mp;
set<pair<long long, int>>st[N];
void dfs(int u, int p) {
    
    st[u].insert({d[u], u});
    for(auto [v, wt] : g[u]) {
        if(v == p) continue;
        d[v] = d[u] - 2ll * wt + w[v];
        dfs(v, u);
        for(auto [x, y] : st[v]) {
            st[u].insert({x, y});
        }
        
    }

    while(st[u].size() > 4) {
        st[u].erase(st[u].begin());
    }
    for(auto [a, _u] : st[u]) {
        for(auto [b, _v] : st[u]) {
            if(_u == _v) continue;
            if(mp.find({_u, _v}) != mp.end()) continue;
            long long ret = a + b - 2ll * d[u] + w[u];
            ans = max(ans, ret);
        }
    }

}
void solve() {
    int n;
    cin >> n;
    for(int i = 1; i <= n; i++) g[i].clear();
    for(int i = 1; i <= n; i++) {
        cin >> w[i];
    }
    mp.clear();
    d[1] = w[1];
    for(int i = 0; i < n - 1; i++) {
        int u, v, wt;
        cin >> u >> v >> wt;
        mp[{u, v}] = 1;
        mp[{v, u}] = 1;
        g[u].push_back({v, wt});
        g[v].push_back({u, wt});
    }

    ans = LLONG_MIN;
    dfs(1, 0);
    cout << ans << '\n';

}

int32_t main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
        
    int t = 1;
    cin >> t;
    
    while(t--){
        solve();
    }

    return 0;
}

Information

Submit By
Type
Submission
Problem
P1205 E. Make Cycle in Tree
Contest
Educational Round 1
Language
C++17 (G++ 13.2.0)
Submit At
2025-07-14 16:14:34
Judged At
2025-07-14 16:14:34
Judged By
Score
0
Total Time
62ms
Peak Memory
14.379 MiB