Submission #1136106

#TimeUsernameProblemLanguageResultExecution timeMemory
1136106Math4Life2020Beads and wires (APIO14_beads)C++20
0 / 100
2 ms4936 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; using pii = pair<ll,ll>; const ll INF = 1e18; const ll Nm = 2e5+5; vector<pii> adj[Nm]; ll N; ll solve(ll ROOT) { vector<pii> fadj[N]; pii radj[N]; queue<ll> q0; q0.push(ROOT); radj[ROOT]={-1,-INF}; vector<ll> itpls; while (!q0.empty()) { ll x = q0.front(); q0.pop(); itpls.push_back(x); for (pii p0: adj[x]) { if (p0.first!=radj[x].first) { fadj[x].push_back(p0); radj[p0.first]={x,p0.second}; q0.push(p0.first); } } } //dp: sum of blue ll dp0[N]; //no blue center up ll dp1[N]; //blue going up with center at this point for (ll IND=(N-1);IND>=0;IND--) { ll x = itpls[IND]; //cout << x << "\n"; if (fadj[x].size()==0) { dp1[x]=-INF; dp0[x]=0; continue; } ll dp0v = 0; vector<ll> vaug; for (pii p0: fadj[x]) { dp0v += max(dp1[p0.first],dp0[p0.first]); vaug.push_back((dp0[p0.first]+p0.second)-max(dp1[p0.first],dp0[p0.first])); } sort(vaug.begin(),vaug.end()); dp0[x]=dp0v; if (vaug.size()>=2) { dp0[x]=max(dp0v,dp0v+vaug[vaug.size()-1]+vaug[vaug.size()-2]); } if (vaug.size()>=1) { dp1[x]=dp0v+vaug[vaug.size()-1]+radj[x].second; } else { dp1[x]=-INF; } } return dp0[ROOT]; } int main() { ios_base::sync_with_stdio(false); cin.tie(0); cin >> N; for (ll i=0;i<(N-1);i++) { ll a,b,c; cin >> a >> b >> c; a--; b--; adj[a].push_back({b,c}); adj[b].push_back({a,c}); } ll ans = -1; for (ll i=0;i<N;i++) { ans = max(ans,solve(i)); } cout << ans << "\n"; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...