Submission #784806

#TimeUsernameProblemLanguageResultExecution timeMemory
784806acatmeowmeowDreaming (IOI13_dreaming)C++11
100 / 100
55 ms18224 KiB
#include "dreaming.h" #include <bits/stdc++.h> using namespace std; const int NMAX = 1e5; int dp[NMAX]; vector<pair<int, int>> adj[NMAX], ans; void dfs(int u, int e, int&maxlen) { int f = 0, se = 0; dp[u] = 0; for (auto&x : adj[u]) { int v = x.first, c = x.second; if (v == e) continue; dfs(v, u, maxlen); dp[u] = max(dp[u], dp[v] + c); if (f < dp[v] + c) se = f, f = dp[v] + c; else se = max(se, dp[v] + c); } maxlen = max(maxlen, f + se); } void dfs2(int u, int e, int&curlen) { int f = 0, se = 0; if (curlen > dp[u]) curlen = dp[u]; for (auto&x : adj[u]) { int v = x.first, c = x.second; if (f < dp[v] + c) se = f, f = dp[v] + c; else se = max(se, dp[v] + c); } for (auto&x : adj[u]) { int v = x.first, c = x.second; if (v == e) continue; int curU = dp[u], curV = dp[v]; if (dp[v] + c != f) dp[u] = f; else dp[u] = se; dp[v] = max(dp[v], dp[u] + c); dfs2(v, u, curlen); dp[u] = curU, dp[v] = curV; } } int travelTime(int N, int M, int L, int A[], int B[], int T[]) { for (int i = 0; i < N; i++) dp[i] = -1; for (int i = 0; i < M; i++) { adj[A[i]].push_back({B[i], T[i]}); adj[B[i]].push_back({A[i], T[i]}); } int maxlen = 0, f = -1e9, se = -1e9, thi = -1e9; for (int i = 0; i < N; i++) { if (dp[i] != -1) continue; dfs(i, 0, maxlen); int curlen = 1e9; dfs2(i, 0, curlen); if (curlen > f) thi = se, se = f, f = curlen; else if (curlen > se) thi = se, se = curlen; else thi = max(thi, curlen); } return max({maxlen, f + L + se, se + 2*L + thi}); } /*#define MAX_N 100000 static int A[MAX_N]; static int B[MAX_N]; static int T[MAX_N]; int main() { int N, M, L, i; int res; //res = fscanf(f, "%d%d%d", &N, &M, &L); cin >> N >> M >> L; for (i = 0; i < M; i++) cin >> A[i] >> B[i] >> T[i]; // res = fscanf(f, "%d%d%d", &A[i], &B[i], &T[i]); //fclose(f); int answer = travelTime(N, M, L, A, B, T); //printf("%d\n", answer); cout << answer << '\n'; return 0; }*/
#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...