提交时间:2024-10-24 13:56:02
运行 ID: 33853
#include <bits/stdc++.h> using namespace std; #define ll long long #define pii pair<short,short> #define p1(x) x.first #define p2(x) x.second short siz[3010][3010],d[3010][3010]; vector<int>g[5010]; ll f[3010][3010]; inline void dfs(int rt,int u,int fa){ siz[rt][u]=1; d[rt][u]=d[rt][fa]+1; for(int v:g[u])if(v!=fa){ dfs(rt,v,u); siz[rt][u]+=siz[rt][v]; } } int n; vector<pii>T[5010]; inline bool cmp(pii A,pii B){ return d[p1(A)][p2(A)]<d[p1(B)][p2(B)]; } signed main(){ ios::sync_with_stdio(0); cin.tie(0),cout.tie(0); // freopen("sample/luckyhowl5.in","r",stdin); // freopen("sample/luckyhowl5.out","w",stdout); cin>>n; for(int i=1;i<n;i++){ int u,v; cin>>u>>v; g[u].push_back(v); g[v].push_back(u); } for(int i=1;i<=n;i++)dfs(i,i,0); for(int u=1;u<=n;u++) for(int v:g[u]) f[u][v]=1ll*siz[u][v]*siz[v][u]; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) T[d[i][j]].push_back({i,j}); ll res=0; for(int i=1;i<=n;i++) for(pii e:T[i]){ int u=p1(e),v=p2(e); if(u==v)continue; res=max(res,f[u][v]); for(int p:g[u]) if(d[p][v]>d[u][v]) f[p][v]=max(f[p][v],f[u][v]+1ll*siz[p][v]*siz[v][p]); for(int p:g[v]) if(d[p][u]>d[u][v]) f[u][p]=max(f[u][p],f[u][v]+1ll*siz[u][p]*siz[p][u]); } cout<<res<<endl; cout.flush(); return 0; }