#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define mp make_pair
#define INF (long long)(2e15)
#define mod2 998244353
#define mod 1000000007
#define eps 1e-9
#define abs(x) ((x)>=0?(x):-(x))
#define y1 solai
#define fi first
#define se second
typedef int ll;
typedef long double ld;
typedef pair<ll,ll> pll;
typedef pair<double,double> pdd;
typedef pair<pll, ll> plll;
mt19937 rng(29);
const ll N=500100;
ll n,x,y,ans,cnt=1,d[N],c[N];
vector<ll>v[N];
void dfs(ll x, ll pr=0)
{
d[x]=1;
c[x]=1;
for(ll to:v[x])
{
if(to==pr)
continue;
dfs(to,x);
if(d[to]+1>d[x])
{
d[x]=d[to]+1;
c[x]=c[to];
}
else if(d[to]+1==d[x])
c[x]+=c[to];
}
}
bool cmp(ll a, ll b)
{
return d[a]>d[b];
}
void solve(ll x)
{
dfs(x);
sort(v[x].begin(),v[x].end(),&cmp);
ll a=d[v[x][0]],b=d[v[x][1]],cc=d[v[x][2]];
if(a==cc)
{
ll sum=0;
for(ll i=0;i<v[x].size();i++)
{
ll to=v[x][i];
if(d[to]!=a)
break;
if(ans==a*(b+cc))
{
cnt+=c[to]*sum;
}
else if(ans<a*(b+cc))
{
ans=a*(b+cc);
cnt=c[to]*sum;
}
sum+=c[to];
}
return;
}
if(a>b&&b==cc)
{
ll sum=0;
for(ll i=1;i<v[x].size();i++)
{
ll to=v[x][i];
if(d[to]!=b)
break;
if(ans==a*(b+cc))
{
cnt+=c[to]*sum;
}
else if(ans<a*(b+cc))
{
ans=a*(b+cc);
cnt=c[to]*sum;
}
sum+=c[to];
}
return;
}
if(a>b&&b>cc)
{
ll sum=c[v[x][1]];
for(ll i=2;i<v[x].size();i++)
{
ll to=v[x][i];
if(d[to]!=cc)
break;
if(ans==a*(b+cc))
{
cnt+=c[to]*sum;
}
else if(ans<a*(b+cc))
{
ans=a*(b+cc);
cnt=c[to]*sum;
}
sum+=c[to];
}
return;
}
ll sum=c[v[x][0]]+c[v[x][1]];
for(ll i=2;i<v[x].size();i++)
{
ll to=v[x][i];
if(d[to]!=cc)
break;
if(ans==a*(b+cc))
{
cnt+=c[to]*sum;
}
else if(ans<a*(b+cc))
{
ans=a*(b+cc);
cnt=c[to]*sum;
}
sum+=c[to];
}
return;
}
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cin>>n;
for(ll i=1;i<n;i++)
cin>>x>>y,v[x].pb(y),v[y].pb(x);
for(ll i=1;i<=n;i++)
if(v[i].size()>2)
solve(i);
cout<<ans<<" "<<cnt<<endl;
}
/*
7
1 2
1 3
2 4
2 5
3 6
3 7
4
1 2
2 3
2 4
5
1 2
2 3
3 4
4 5
*/
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |