Need Help IN Yesterdays' Codechef Problem :
Difference between en3 and en4, changed 0 character(s)
https://www.codechef.com/problems/EXEPDIAM↵
↵
<spoiler summary="Code">↵
↵
vector<int> adj[maxN];↵
↵
vector<int>dist;↵
↵
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));↵
↵
↵
set<int>st1 , 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;↵
↵
↵
}↵
↵
</spoiler>↵
↵

History

 
 
 
 
Revisions
 
 
  Rev. Lang. By When Δ Comment
en4 English ONE___PIECE 2024-01-11 16:41:52 0 (published)
en3 English ONE___PIECE 2024-01-11 16:41:03 48 (saved to drafts)
en2 English ONE___PIECE 2024-01-11 16:39:49 132
en1 English ONE___PIECE 2024-01-11 16:38:24 1323 Initial revision (published)