제출 #1275311

#제출 시각아이디문제언어결과실행 시간메모리
1275311desmond1015꿈 (IOI13_dreaming)C++20
0 / 100
16 ms4856 KiB
#include "bits/stdc++.h" #include "dreaming.h" using namespace std; #define ll long long int MOD = 1e9+7; int INF = 1e9; int travelTime(int N, int M, int L, int A[], int B[], int T[]) { int n = M, m = M, l = L; vector<array<int, 2>> g[n]; for (int i = 0; i < m; i++) { g[A[i]].push_back({B[i], T[i]}); g[B[i]].push_back({A[i], T[i]}); } vector<ll> mx(n), smx(n); vector<int> compId(n); vector<bool> vis(n); int cc = 0; function<void(int)> dfs1 = [&](int u) { vis[u] = true; compId[u] = cc; for (auto [v, t] : g[u]) { if (vis[v]) continue; dfs1(v); if (mx[v] + t > mx[u]) { smx[u] = mx[u]; mx[u] = mx[v] + t; } else if (mx[v] + t > smx[u]) { smx[u] = mx[v] + t; } } }; for (int i = 0; i < n; i++) { if (vis[i]) continue; dfs1(i); cc++; } function<void(int)> dfs2 = [&](int u) { vis[u] = true; for (auto [v, t] : g[u]) { if (vis[v]) continue; if (mx[v] + t == mx[u]) { if (smx[u] + t > mx[v]) { smx[v] = mx[v]; mx[v] = smx[u] + t; } else if (smx[u] + t > smx[v]) { smx[v] = smx[u] + t; } } else { if (mx[u] + t > mx[v]) { smx[v] = mx[v]; mx[v] = mx[u] + t; } else if (mx[u] + t > smx[v]) { smx[v] = mx[u] + t; } } dfs2(v); } }; vis.assign(n, false); for (int i = 0; i < n; i++) { if (vis[i]) continue; dfs2(i); } vector<ll> comp(cc, 1e17); for (int i = 0; i < n; i++) { int id = compId[i]; comp[id] = min(comp[id], mx[i]); } sort(comp.rbegin(), comp.rend()); assert(cc > 1); ll ans = comp[0] + comp[1] + l; return ans; } // int travelTime() { // ios_base::sync_with_stdio(false); // cin.tie(NULL); // // freopen("input.txt", "r", stdin); // // freopen("output.txt", "w", stdout); // // freopen("input.in", "r", stdin); // // freopen("output.out", "w", stdout); // // int T = 1; // // cin >> T; // // while (T--) { // solve(); // // } // 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...