제출 #777887

#제출 시각아이디문제언어결과실행 시간메모리
777887teokakabadze꿈 (IOI13_dreaming)C++17
18 / 100
34 ms15168 KiB
#include "dreaming.h" #include<bits/stdc++.h> using namespace std; #define n 200005 #define pb push_back #define f first #define s second #define pii pair<int, int> int mn, dp[n], b[n], d[n]; bool f[n]; vector<pii> v[n]; void dfs(int u, int p) { f[u] = 1; for(auto x : v[u]) if(x.f != p) { dfs(x.f, u); if(dp[x.f] + x.s >= dp[u]) { d[u] = dp[u]; b[u] = x.f; dp[u] = dp[x.f] + x.s; } else d[u] = max(d[u], dp[x.f] + x.s); } } void dfs1(int u, int p, int k) { if(k > dp[u]) b[u] = -1, dp[u] = k; mn = min(mn, dp[u]); for(auto x : v[u]) if(x.f != p) { if(b[u] == x.f) dfs1(x.f, u, max(d[u], k) + x.s); else dfs1(x.f, u, dp[u] + x.s); } } int travelTime(int N, int M, int L, int A[], int B[], int T[]) { int i; vector<int> c; for(i = 0; i < M; i++) { v[A[i]].pb({B[i], T[i]}); v[B[i]].pb({A[i], T[i]}); } for(i = 0; i < N; i++) if(!f[i]) { dfs(i, -1); mn = dp[i]; dfs1(i, -1, 0); //cout << i << ' ' << mn << '\n'; c.pb(mn); } sort(c.rbegin(), c.rend()); if(c.size() == 1) return c[0]; if(c.size() == 2) return L + c[0] + c[1]; return max(c[0] + c[1] + L, 2 * L + c[1] + c[2]); }
#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...