#include<bits/stdc++.h>
using namespace std;
#define maxn 300
struct Edge{
int from,to,nxt,flag;}edge[maxn<<
1];
int n,head[maxn],tot,a,b,dis[maxn];
void init(){
memset(head,-
1,
sizeof head);
tot=
0;
}
void addedge(
int u,
int v){
edge[tot].from=u,edge[tot].to=v;edge[tot].nxt=head[u];head[u]=tot++
;
edge[tot].flag=
1;
}
int Max,node;
void dfs(
int u,
int pre,
int dep){
if(dep>Max){node=u,Max=
dep;}
for(
int i=head[u];i!=-
1;i=
edge[i].nxt){
int v=
edge[i].to;
if(edge[i].flag==
0 || v==pre)
continue;
dfs(v,u,dep+
1);
}
}
int getdis(
int root){
node=
root;
Max=
0,dfs(root,
0,
0);
Max=
0,dfs(node,
0,
0);
return Max;
}
int main(){
init();
cin>>
n;
for(
int i=
1;i<n;i++
){
int u,v;
cin>>u>>
v;
addedge(u,v);
addedge(v,u);
}
int ans=-
1;
for(
int i=
0;i<tot;i+=
2){
int u=edge[i].
from,v=
edge[i].to;
edge[i].flag=edge[i^
1].flag=
0;
int m1=getdis(u),m2=
getdis(v);
ans=max(ans,m1*
m2);
edge[i].flag=edge[i^
1].flag=
1;
}
printf("%d\n",ans);
}
转载于:https://www.cnblogs.com/zsben991126/p/10333334.html