Submission #434889

#TimeUsernameProblemLanguageResultExecution timeMemory
434889kevinxiehkDreaming (IOI13_dreaming)C++17
47 / 100
1087 ms15104 KiB
#include "dreaming.h" #include <bits/stdc++.h> #define pb emplace_back #define fi first #define se second #define mp make_pair using namespace std; vector<pair<int, int>> conn[100005]; bool vi[100005]; bool vi2[100005]; int par2[100005]; int dk2[100005]; vector<int> dia, hf; int md, mdx; void dfs(int now, int di) { if(vi[now]) return; vi[now] = true; if(di > md) { md = di; mdx = now; } for(auto x: conn[now]) dfs(x.fi, di + x.se); } void dfs2(int now, int di) { if(vi2[now]) return; vi2[now] = true; if(di > md) { md = di; mdx = now; } for(auto x: conn[now]) { if(!vi2[x.fi]){ par2[x.fi] = now; dk2[x.fi] = x.se; dfs2(x.fi, di + x.se); } } } void once(int a) { md = 0, mdx = a; dfs(a, 0); cerr << a << ' ' << md << '\n'; md = 0; par2[mdx] = -1; dfs2(mdx, 0); dia.pb(md); cerr << a << ' ' << md << '\n'; int an = md; int tt = md; while(mdx != -1) { an = min(an, max(md, tt - md)); md -= dk2[mdx]; mdx = par2[mdx]; } cerr << a << ' ' << an << '\n'; hf.pb(an); } int travelTime(int n, int m, int l, int a[], int b[], int t[]) { for(int i = 0; i < m; i++) { conn[a[i]].pb(mp(b[i], t[i])); conn[b[i]].pb(mp(a[i], t[i])); } for(int i = 0; i < n; i++) { if(vi[i]) continue; else once(i); } sort(dia.begin(), dia.end()); reverse(dia.begin(), dia.end()); sort(hf.begin(), hf.end()); reverse(hf.begin(), hf.end()); if(dia.size() == 1) return dia[0]; else return max(dia[0], hf[0] + hf[1] + l); }
#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...