Submission #250042

#TimeUsernameProblemLanguageResultExecution timeMemory
250042MarcoMeijerDreaming (IOI13_dreaming)C++14
100 / 100
144 ms24952 KiB
#include "dreaming.h" #include <bits/stdc++.h> using namespace std; //macros typedef long long ll; typedef pair<int, int> ii; typedef pair<ll, ll> lll; typedef tuple<int, int, int> iii; typedef vector<int> vi; typedef vector<ii> vii; typedef vector<iii> viii; typedef vector<ll> vll; typedef vector<lll> vlll; #define REP(a,b,c) for(int a=int(b); a<int(c); a++) #define RE(a,c) REP(a,0,c) #define RE1(a,c) REP(a,1,c+1) #define REI(a,b,c) REP(a,b,c+1) #define REV(a,b,c) for(int a=int(c-1); a>=int(b); a--) #define INF 1e9 #define pb push_back #define fi first #define se second const int MX = 3e5; int n, m, l; vii adj[MX]; ii len[MX]; bitset<MX> visited; ii push(ii p, int v) { return {max(p.fi,v), max(min(p.fi,v),p.se)}; } void dfsSize(int u, int p=-1) { visited[u] = 1; len[u] = {0, 0}; for(ii v:adj[u]) if(v.fi!=p) dfsSize(v.fi,u), len[u] = push(len[u], v.se+len[v.fi].fi); } ii getShortest(int u, int p=-1, int top = 0) { ii ans = {max(top, len[u].fi), u}; for(ii v:adj[u]) if(v.fi!=p) { int nTop = v.se + top; if(len[u].fi == v.se+len[v.fi].fi) nTop = max(nTop, v.se + len[u].se); else nTop = max(nTop, v.se + len[u].fi); ans = min(ans, getShortest(v.fi, u, nTop)); } return ans; } ii dfsFurthest(int u, int p=-1, int d=0) { ii ans = {d,u}; for(ii v:adj[u]) if(v.fi!=p) ans = max(ans, dfsFurthest(v.fi, u, v.se+d)); return ans; } int travelTime(int N, int M, int L, int A[], int B[], int T[]) { n=N, m=M, l=L; RE(i,m) adj[A[i]].pb({B[i], T[i]}); RE(i,m) adj[B[i]].pb({A[i], T[i]}); priority_queue<ii> pq; visited.reset(); RE(u,n) { if(visited[u]) continue; dfsSize(u); ii p = getShortest(u); pq.push(p); } int u = pq.top().se; pq.pop(); while(!pq.empty()) { int v = pq.top().se; pq.pop(); adj[u].pb({v, l}); adj[v].pb({u, l}); } ii p = dfsFurthest(0); return dfsFurthest(p.se).fi; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...