Submission #481565

#TimeUsernameProblemLanguageResultExecution timeMemory
481565CyberSleeperRace (IOI11_race)C++14
100 / 100
482 ms107520 KiB
#include <bits/stdc++.h> //#include "race.h" #define ll long long #define pii pair<ll, ll> #define fi first #define se second #define pb push_back using namespace std; const ll MX=200007, INF=1e9+7; ll N, K, ret=INF; map<ll, ll> ada[MX]; vector<pii> adj[MX]; pii lazy[MX]; void DFS(int par, int idx){ lazy[idx]={0, 0}; ada[idx][0]=0; for(auto i:adj[idx]){ int v=i.fi, w=i.se; if(v==par) continue; DFS(idx, v); lazy[v].fi+=w; lazy[v].se++; if(ada[idx].size()<ada[v].size()){ swap(ada[idx], ada[v]); swap(lazy[idx], lazy[v]); } for(auto jj:ada[v]){ pii j=jj; j.fi+=lazy[v].fi-lazy[idx].fi; j.se+=lazy[v].se-lazy[idx].se; if(ada[idx].count(K-j.fi-lazy[idx].fi*2)) ret=min(ret, lazy[idx].se*2+j.se+ada[idx][K-j.fi-lazy[idx].fi*2]); } for(auto jj:ada[v]){ pii j=jj; j.fi+=lazy[v].fi-lazy[idx].fi; j.se+=lazy[v].se-lazy[idx].se; if(ada[idx].count(j.fi)) ada[idx][j.fi]=min(ada[idx][j.fi], j.se); else ada[idx][j.fi]=j.se; } } if(ada[idx].count(K-lazy[idx].fi)) ret=min(ret, lazy[idx].se+ada[idx][K-lazy[idx].fi]); } int best_path(int n, int k, int H[][2], int L[]){ N=n, K=k; for(int i=0, u, v, w; i<N-1; i++){ u=H[i][0], v=H[i][1], w=L[i]; adj[u].pb({v, w}); adj[v].pb({u, w}); } DFS(0, 0); return (ret>=INF?-1:ret); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...