Submission #1014091

#TimeUsernameProblemLanguageResultExecution timeMemory
1014091ZanPDreaming (IOI13_dreaming)C++17
18 / 100
56 ms38736 KiB
#include "dreaming.h" #include <iostream> #include <vector> #include <algorithm> #include <cstring> #define ll long long using namespace std; const int mxN = 1e6; const ll INF = 1e15; ll n, m, l; int travelTime(int N, int M, int L, int A[], int B[], int T[]); vector<pair<ll, ll>> pov[mxN]; ll td[mxN]; bool vis[mxN]; ll maxd = 0, cnt = 0; pair<ll, ll> dfs(ll u, ll par) { pair<ll, ll> ans = { 0,u }; vis[u] = true; for (auto p : pov[u]) { ll v = p.first; ll c = p.second; if (v != par) { pair<ll, ll> q = dfs(v, u); q.first += c; ans = max(ans, q); } } return ans; } ll opt = INF; ll opt_dfs(ll u, ll tar, ll d, ll par) { if (u == tar) { opt = d; return d; } ll ans = INF; for (auto p : pov[u]) { ll v = p.first; ll c = p.second; if (v != par) { ll dis = opt_dfs(v, tar, d, u) - c; ans = min(ans, dis); } } opt = min(max(ans,d-ans), opt); return ans; } int travelTime(int N, int M, int L, int A[], int B[], int T[]) { ll n = N; ll m = M; ll l = L; for (ll i = 0; i < m; i++) { ll a = A[i], b = B[i], c = T[i]; pov[a].push_back({ b,c }); pov[b].push_back({ a,c }); } memset(vis, 0, n); for (ll i = 0; i < n; i++) { if (!vis[i] && pov[i].size() <= 1) { pair<ll, ll> p = dfs(i, -1); pair<ll, ll> q = dfs(p.second, -1); maxd = q.first; opt = INF; opt_dfs(p.second, q.second, q.first, -1); td[cnt] = -opt; cnt++; } } if (cnt == 1) { return maxd; } sort(td, td + cnt); ll ans = l - td[0] - td[1]; if (cnt > 2) { ans = max(ans, 2 * l - td[1] - td[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...