제출 #1318396

#제출 시각아이디문제언어결과실행 시간메모리
1318396ayaz꿈 (IOI13_dreaming)C++20
14 / 100
1095 ms14708 KiB
#pragma GCC optimize("O3") #include "bits/stdc++.h" #include <algorithm> #include "dreaming.h" using namespace std; vector<vector<array<int, 2>>> g; vector<bool> used; vector<int> dis, nodes, par; int n; void dfs(int u, bool collect = 0, int p = -1) { if (collect) { nodes.push_back(u); } used[u] = 1; par[u] = p; for (auto &[v, w] : g[u]) { if (v == p) continue; dis[v] = dis[u] + w; dfs(v, collect, u); } } pair<int, int> findDiameter(int u) { dis[u] = 0; nodes.clear(); dfs(u, 1); int start = 0; for (auto i : nodes) if (dis[i] > dis[start]) start = i; nodes.clear(); dis[start] = 0; dfs(start, 1); int finish = 0; for (auto i : nodes) if (dis[i] > dis[finish]) finish = i; nodes.clear(); int mid = 1e9, nodeMid = 0; for (int v = finish; v != -1; v = par[v]) { int cur = max(dis[v], dis[finish]- dis[v]); if (cur <= mid) { nodeMid = v; mid = cur; } } return {dis[finish], nodeMid}; } array<int, 2> findCenter(int u) { int ans = 1e9, cent; auto [diameter, mid] = findDiameter(u); return {dis[mid], mid}; } int travelTime(int N, int M, int L, int A[], int B[], int T[]) { int m = M, l = L; n = N; dis.resize(n + 1, 0); par.resize(n + 1, 0); g.resize(n + 1); used.assign(n + 1, false); for (int i = 0; i < m; i++) { int u = A[i], v = B[i], w = T[i]; u++, v++; g[u].push_back({v, w}); g[v].push_back({u, w}); } vector<array<int, 2>> mx; for (int u = 1; u <= n; u++) { if (used[u]) continue; mx.push_back(findCenter(u)); } sort(mx.rbegin(), mx.rend()); for (int i = 1; i < size(mx); i++) { g[mx[i][1]].push_back({mx[0][1], l}); g[mx[0][1]].push_back({mx[i][1], l}); } int ans = 0; ans = findDiameter(1).first; 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...