Submission #1258620

#TimeUsernameProblemLanguageResultExecution timeMemory
1258620goulthenDreaming (IOI13_dreaming)C++20
100 / 100
62 ms15760 KiB
#include "dreaming.h" #include <bits/stdc++.h> using namespace std; using pii = pair<int,int>; const int MAXN = 1e5+10; #define rep(i, a, b) for (int i = a; i <= b; ++i) #define fi first #define se second #define all(x) (x).begin(), (x).end() vector<pii> g[MAXN]; bool mk[MAXN]; int dist[MAXN][2]; pii dfs(int u, int p = -1) { pii ans={0,u}; mk[u] = 1; for (auto &[v,w] : g[u]) { if (v == p) continue; pii x = dfs(v,u); x.fi+=w; ans = max(ans, x); } return ans; } void dfs2(int u, int k, int p = -1) { for (auto &[v,w] : g[u]) { if (v==p) continue; dist[v][k] = dist[u][k] + w; dfs2(v,k,u); } } int dfs3(int u, int p = -1) { int x = max(dist[u][0], dist[u][1]); for (auto &[v,w] : g[u]) { if (v==p)continue; x = min(x, dfs3(v,u)); } return x; } int travelTime(int N, int M, int L, int A[], int B[], int T[]) { rep(i,0,M-1) { g[A[i]].emplace_back(B[i], T[i]); g[B[i]].emplace_back(A[i], T[i]); } vector<int> mxd; int ans = 0; rep(i,0,N-1) { if (mk[i]) continue; auto [_, c1] = dfs(i); auto [d, c2] = dfs(c1); dfs2(c1,0); dfs2(c2,1); ans = max(ans,d); mxd.push_back(dfs3(i)); } sort(all(mxd), greater<int>()); if (mxd.size() > 1) { ans = max(ans, L+mxd[0]+mxd[1]); } if (mxd.size() > 2) { ans = max(ans, 2*L + mxd[1] + mxd[2]); } return ans; }
#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...