제출 #216818

#제출 시각아이디문제언어결과실행 시간메모리
216818quocnguyen1012Hard route (IZhO17_road)C++14
52 / 100
2082 ms58680 KiB
#include <bits/stdc++.h> #define fi first #define se second #define mp make_pair #define pb push_back #define eb emplace_back using namespace std; typedef long long ll; typedef pair<int, int> ii; const int maxn = 5e5 + 5; vector<int> adj[maxn]; int N; ii dist[maxn]; void prepare(int u, int p = -1) { dist[u] = mp(0, 0); for(int v : adj[u]) if(v != p){ prepare(v, u); int now = dist[v].fi + 1; if(dist[u].fi < now){ dist[u].se = dist[u].fi; dist[u].fi = now; } else if(dist[u].se < now){ dist[u].se = now; } } } pair<ll, int> dfs(int u, int p = -1, int dep = 0, int mx = 0) { if(adj[u].size() == 1 && p != -1) return mp(1ll * dep * mx, 1); pair<ll, int> res = mp(0, 0); for(int v : adj[u]) if(v != p){ pair<ll, int> val; if(dist[u].fi == dist[v].fi + 1) val = dfs(v, u, dep + 1, max(mx, dist[u].se)); else val = dfs(v, u, dep + 1, max(mx, dist[u].fi)); if(val.fi > res.fi) res = val; else if(val.fi == res.fi) res.se += val.se; } return res; } signed main(void) { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); #ifdef LOCAL freopen("A.INP", "r", stdin); freopen("A.OUT", "w", stdout); #endif // LOCAL cin >> N; for(int i = 1; i < N; ++i){ int u, v; cin >> u >> v; adj[u].eb(v); adj[v].eb(u); } pair<ll, int> res = mp(0, 0); for(int i = 1; i <= N; ++i){ if(adj[i].size() == 1){ prepare(i); auto cur = dfs(i); if(res.fi < cur.fi) res = cur; else if(res.fi == cur.fi) res.se += cur.se; } } cout << res.fi << ' ' << res.se / 2; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...