https://www.codechef.com/problems/EXEPDIAM
vector adj[maxN]; vectordist;
void dfs(int u , int p) { for (auto v : adj[u]) { if (v == p) continue; dist[v] = dist[u] + 1; dfs(v , u); } } void solve() { int n ; cin >> n; for (int i = 0 ; i < n ; i++) adj[i].clear(); for (int i = 0 ; i < n — 1 ; i++) { int u , v ; cin >> u >> v; u--; v--; adj[u].push_back(v); adj[v].push_back(u); } if (n == 1) { cout << 3 << endl; return; } dist.assign(n , 0); dfs(0 , -1); int u = max_element(all(dist)) — dist.begin(); dist.assign(n , 0); dfs(u , -1); int v = max_element(all(dist)) — dist.begin(); int max_d = *max_element(all(dist)); setst1 , st2; for (int i = 0 ; i < n ; i++) { if (i == u)continue; if (dist[i] == max_d)st1.insert(i); if (dist[i] == max_d — 1)st2.insert(i); } dist.assign(n , 0); dfs(v , -1); for (int i = 0 ; i < n ; i++) { if (i == v)continue; if (dist[i] == max_d)st1.insert(i); if (dist[i] == max_d — 1)st2.insert(i); } int ans = 2 * st2.size(); ans += (2 * (max_d) * st1.size()); int x = st1.size(); ans += (x * (x — 1)); ans += x; cout << ans << endl; }




