Submission #1148696

#TimeUsernameProblemLanguageResultExecution timeMemory
1148696TsaganaDreaming (IOI13_dreaming)C++20
0 / 100
12 ms1600 KiB
#include "dreaming.h" #include <bits/stdc++.h> #define all(x) x.begin(), x.end() #define lnl long long #define pii pair<int, int> #define pq priority_queue #define eb emplace_back #define lb lower_bound #define ub upper_bound #define pb push_back #define pp pop_back #define F first #define S second using namespace std; int P[10010], W[10010]; vector<pii> adj[10010]; pii dfs(int v, int p, int w) { P[v] = p; W[v] = w; pii ans = {0, v}; for (auto [u, w] : adj[v]) { if (u == p) continue ; pii tmp = dfs(u, v, w); tmp.F += w; ans = max(ans, tmp); } return ans; } int travelTime(int N, int M, int L, int V[], int U[], int T[]) { for (int i = 0; i < M; i++) { adj[V[i]].pb({U[i], T[i]}); adj[U[i]].pb({V[i], T[i]}); } fill(P, P+N, -2); int ans = 0; vector<int> v; for (int i = 0; i < N; i++) { if (P[i] != -2) continue; int s = dfs(i, -1, 0).S; auto [x, u] = dfs(i, -1, 0); int y = 0; ans = max(ans, x); int k = 2e9; while (1) { k = min(k, max(x, y)); if (P[u] == -1) break; y += W[u]; x -= W[u]; u = P[u]; } v.pb(k); } sort(all(v)); reverse(all(v)); if (v.size() >= 2) ans = max(ans, L + v[0] + v[1]); if (v.size() >= 3) ans = max(ans, L + L + v[1] + v[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...