Submission #1130728

#TimeUsernameProblemLanguageResultExecution timeMemory
1130728brover29Hard route (IZhO17_road)C++20
52 / 100
2097 ms52836 KiB
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const ll N=5e5+29;
ll n,ans,cnt=1,d[N],c[N];
vector<ll>g[N];
void dfs(ll v,ll pr=0){
	d[v]=1;
	c[v]=1;
	for(ll to:g[v]){
		if(to==pr)continue;
		dfs(to,v);
		if(d[to]+1==d[v])c[v]+=c[to];
		if(d[to]+1>d[v]){
			d[v]=d[to]+1;
			c[v]=c[to];
		}
	}
}
bool cmp(ll a, ll b){
	return d[a]>d[b];
}
void solve(ll x){
	dfs(x);
	sort(g[x].begin(),g[x].end(),&cmp);
	for(ll j=0;j<g[x].size();j++){
		for(ll k=j+1;k<g[x].size();k++){
			for(ll i=0;i<g[x].size();i++){
				if(i==j||i==k)continue;
				ll a=g[x][i],b=g[x][j],cc=g[x][k];
				if(d[a]*(d[b]+d[cc])==ans){
					cnt+=c[b]*c[cc];
					break;
				}
				if(d[a]*(d[b]+d[cc])>ans){
					ans=d[a]*(d[b]+d[cc]);
					cnt=c[b]*c[cc];
					break;
				}
			}
		}
	}
}
int main()
{
	ios_base::sync_with_stdio(0);
	cin.tie(0);

	cin>>n;
	for(ll i=1;i<n;i++){
        ll v,u;
        cin>>v>>u;
        g[v].push_back(u);
        g[u].push_back(v);
	}
	for(ll i=1;i<=n;i++){
		if(g[i].size()>=3){
			solve(i);
		}
	}
	cout<<ans<<" "<<cnt<<'\n';
}

#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...