[CF1292C] Xenon's Attack on the Gangs

题目

原题链接

解说

讲解

感谢XMH同志提供的分享,讲的真的是太好了,清楚明白。

代码

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 const int maxn=3000+5;
 5 int n,rt,p[maxn][maxn],s[maxn][maxn];
 6 ll f[maxn][maxn],ans;
 7 vector<int> G[maxn];
 8 void Build(int u){
 9     s[rt][u]=1;
10     for(int v: G[u]) if(v^p[rt][u]){
11         p[rt][v]=u;
12         Build(v);
13         s[rt][u]+=s[rt][v];
14     }
15 }
16 ll dp(int u,int v){
17     if(u==v) return 0;
18     if(f[u][v]) return f[u][v];
19     return f[u][v]=max(dp(u,p[u][v]),dp(v,p[v][u]))+s[u][v]*s[v][u];
20 }
21 int main(){
22     scanf("%d",&n);
23     for(int i=1;i<n;i++){
24         int x,y;
25         scanf("%d%d",&x,&y);
26         G[x].push_back(y);
27         G[y].push_back(x);
28     }
29     for(int i=1;i<=n;i++){
30         rt=i;
31         Build(i);
32     }
33     for(int i=1;i<=n;i++){
34         for(int j=1;j<=n;j++){
35             ans=max(ans,dp(i,j));
36         }
37     }
38     printf("%lld",ans);
39     return 0;
40 }
View Code

(C++ 11运行)

 

幸甚至哉,歌以咏志。

(结果还是水过去了……)

posted @ 2020-04-11 11:59  DarthVictor  阅读(168)  评论(0编辑  收藏  举报
莫挨老子!