Submission #947052

#TimeUsernameProblemLanguageResultExecution timeMemory
947052atomHard route (IZhO17_road)C++17
19 / 100
2060 ms12376 KiB
#include "bits/stdc++.h" // @JASPER'S BOILERPLATE using namespace std; using ll = long long; #ifdef JASPER #include "debug.h" #else #define debug(...) 166 #endif const int N = 5e5 + 5; int n; vector <int> adj[N]; vector <int> path; bool found; void dfs(int a, int b, int p) { if (found) return; path.push_back(a); for (int v : adj[a]) { if (v == p) continue; dfs(v, b, a); if (v == b) { path.push_back(b); found = true; return; } } if (found) return; path.pop_back(); } signed main() { cin.tie(0) -> sync_with_stdio(0); cin >> n; for (int i = 1; i < n; ++i) { int u, v; cin >> u >> v; adj[u].push_back(v); adj[v].push_back(u); } //sub1: O(n^3) vector <int> ter; for (int i = 1; i <= n; ++i) if ((int) adj[i].size() == 1) ter.push_back(i); int ans = 0, cnt = 0; for (int i = 0; i < (int) ter.size(); ++i) { for (int j = i + 1; j < (int) ter.size(); ++j) { path.clear(); found = false; dfs(ter[i], ter[j], 0); vector <int> dis(n + 5, 1e9); queue <int> q; for (int x : path) { q.push(x); dis[x] = 0; } while (!q.empty()) { int x = q.front(); q.pop(); for (int y : adj[x]) { if (dis[y] > dis[x] + 1) { dis[y] = dis[x] + 1; q.push(y); } } } int len = (int) path.size() - 1; int h = 0; for (int x = 1; x <= n; ++x) h = max(h, dis[x]); if (h == (int) (1e9)) h = 0; if (ans < h * len) { ans = h * len; cnt = 1; } else if (ans == h * len) { cnt++; } } } cout << ans << " " << cnt << "\n"; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...