Submission #727082

#TimeUsernameProblemLanguageResultExecution timeMemory
727082hoainiemDreaming (IOI13_dreaming)C++14
47 / 100
82 ms10224 KiB
#include "dreaming.h" #include <bits/stdc++.h> #define fi first #define se second #define nmax 100008 const int inf = 1e9 + 7; using namespace std; typedef pair<int, int> pii; vector<pii>vt, l[nmax]; bool kt[nmax], vis[nmax]; int n, dis[2][nmax]; stack<int>s; void bfs(int root, int id){ fill(dis[id], dis[id] + nmax, -1); s.push(root); dis[id][root] = 0; while (!s.empty()){ int u = s.top(); s.pop(); kt[u] = vis[u] = true; for (pii it : l[u]) if (dis[id][it.fi] == -1){ dis[id][it.fi] = dis[id][u] + it.se; s.push(it.fi); } } } pii calc(int rt){ fill(kt, kt + n + 1, false); bfs(rt, 0); int u = 0, v = 0, res = inf; for (int i = 1; i < n; i++) if (dis[0][u] < dis[0][i]) u = i; bfs(u, 1); for (int i = 1; i < n; i++) if (dis[1][v] < dis[1][i]) v = i; bfs(v, 0); for (int i = 0; i < n; i++) if (kt[i]) res = min(res, max(dis[0][i], dis[1][i])); return {dis[0][u], res}; } int travelTime(int N, int M, int L, int A[], int B[], int T[]) { n = N; for (int i = 0; i < M; i++){ int u = A[i], v = B[i], w = T[i]; l[u].push_back({v, w}); l[v].push_back({u, w}); } assert(M == N - 2); fill(vis, vis + n + 1, false); for (int i = 0; i < N; i++) if (!vis[i]) vt.push_back(calc(i)); return max({vt[0].fi, vt[1].fi, vt[0].se + vt[1].se + 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...