#include<bits/stdc++.h>
#pragma GCC optimize("O3,unroll-loops")
using namespace std;
int n;
vector<int> con[500005];
map<int,pair<int,pair<int,int>>> dp[500005];
int root;
int depth[500005];
int siz[500005];
int maxd[500005];
int sus[500005];
int parent[500005];
pair<int,int> mxm = {0,0};
pair<int,pair<int,int>> combine(pair<int,pair<int,int>> x, pair<int,pair<int,int>> y)
{
if(x.second.second==0)
return y;
if(y.second.second==0)
return x;
if(x.first > y.first)
return x;
if(x.first < y.first)
return y;
return {x.first, {x.second.first + y.second.first, x.second.second + y.second.second}};
}
void dfs_init(int nod, int par)
{
parent[nod]=par;
siz[nod]=1;
maxd[nod]=depth[nod];
for(auto adj:con[nod])
{
if(adj!=par)
{
depth[adj]=depth[nod]+1;
dfs_init(adj,nod);
maxd[nod] = max(maxd[nod], maxd[adj]);
siz[nod]+=siz[adj];
}
}
}
void dfs(int nod)
{
//cout<<nod<<" start\n";
int cntc=0;
set<pair<int,int>> s;
s.insert({-1,-1});
for(auto adj:con[nod])
{
if(adj!=parent[nod])
{
dfs(adj);
s.insert({maxd[adj], adj});
cntc++;
}
}
//cout<<nod<<" dfs done\n";
for(auto adj:con[nod])
{
if(adj==parent[nod])
continue;
for(auto adj2:con[nod])
{
if(adj2==parent[nod] || adj>=adj2)
continue;
s.erase({maxd[adj],adj});
s.erase({maxd[adj2],adj2});
for(auto it:dp[adj])
{
for(auto it2:dp[adj2])
{
pair<int,int> idk = *s.rbegin();
///pair<int,int> aux = {(it.first + it2.first - 2*depth[nod]) * max({it.second.first,it2.second.first,sus[nod],idk.first-depth[nod]}), it.second.second * it2.second.second};
int moduri;
if(max(sus[nod],idk.first-depth[nod]) == max({it.second.first,it2.second.first,sus[nod],idk.first-depth[nod]}))
{
moduri = it.second.second.second * it2.second.second.second;
}
else if(it.second.first > it2.second.first)
{
moduri = it.second.second.first * it2.second.second.second;
}
else if(it.second.first < it2.second.first)
{
moduri = it2.second.second.first * it.second.second.second;
}
else
{
moduri = it.second.second.first * it2.second.second.second + it2.second.second.first * it.second.second.second - it.second.second.first * it2.second.second.first;
}
pair<int,int> aux = {(it.first + it2.first - 2*depth[nod]) * max({it.second.first,it2.second.first,sus[nod],idk.first-depth[nod]}), moduri};
if(aux.first > mxm.first)
mxm = aux;
else if(aux.first == mxm.first)
mxm.second += aux.second;
}
}
s.insert({maxd[adj],adj});
s.insert({maxd[adj2],adj2});
}
}
//cout<<nod<<" mxm calc done\n";
if(cntc==0)
{
dp[nod][depth[nod]] = {0,{1,1}};
}
else
{
for(auto adj:con[nod])
{
if(adj==parent[nod])
continue;
s.erase({maxd[adj],adj});
pair<int,int> idk = *s.rbegin();
//cout<<nod<<" "<<adj<<" "<<idk.first<<" "<<idk.second<<" idk\n";
for(auto it:dp[adj])
{
pair<int,pair<int,int>> x = it.second;
x.first = max(x.first, idk.first - depth[nod]);
if(idk.first - depth[nod] >= x.first)
{
x = {idk.first - depth[nod], {x.second.second, x.second.second}};
}
dp[nod][it.first] = combine(dp[nod][it.first], x);
}
s.insert({maxd[adj],adj});
//dp[adj].clear();
}
}
//for(auto it:dp[nod])
// cout<<nod<<" "<<it.first<<" "<<it.second.first<<" "<<it.second.second<<"\n";
//cout<<nod<<" end\n";
}
void calc_sus()
{
for(int i=1;i<=n;i++)
{
sus[i] = depth[i];
int prec=i;
for(int j=parent[i];j!=0;j=parent[j])
{
for(auto adj:con[j])
{
if(adj!=parent[j] && adj!=prec)
{
sus[i] = max(sus[i], (maxd[adj] - depth[j]) + (depth[i] - depth[j]));
}
}
prec=j;
}
//cout<<i<<" "<<sus[i]<<" sus\n";
}
}
signed main()
{
ios_base::sync_with_stdio(0);cin.tie(0);
cin>>n;
if(n==2)
{
cout<<0<<" "<<1;
return 0;
}
int a,b;
for(int i=1;i<n;i++)
{
cin>>a>>b;
con[a].push_back(b);
con[b].push_back(a);
}
for(int i=n;i>0;i--)
if((int)con[i].size()>1)
root=i;
//cout<<root<<" is the root\n";
dfs_init(root,0);
calc_sus();
dfs(root);
cout<<mxm.first<<" "<<mxm.second<<"\n";
return 0;
}
/**
7
1 2
1 3
2 4
2 5
4 6
4 7
*/
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
9 ms |
43100 KB |
Output is correct |
2 |
Correct |
9 ms |
43256 KB |
Output is correct |
3 |
Correct |
9 ms |
43100 KB |
Output is correct |
4 |
Correct |
9 ms |
43200 KB |
Output is correct |
5 |
Correct |
8 ms |
43096 KB |
Output is correct |
6 |
Correct |
8 ms |
36956 KB |
Output is correct |
7 |
Correct |
9 ms |
43100 KB |
Output is correct |
8 |
Correct |
9 ms |
43180 KB |
Output is correct |
9 |
Correct |
9 ms |
43100 KB |
Output is correct |
10 |
Correct |
9 ms |
43100 KB |
Output is correct |
11 |
Correct |
9 ms |
43196 KB |
Output is correct |
12 |
Correct |
9 ms |
43316 KB |
Output is correct |
13 |
Correct |
9 ms |
43100 KB |
Output is correct |
14 |
Correct |
9 ms |
43100 KB |
Output is correct |
15 |
Correct |
9 ms |
43100 KB |
Output is correct |
16 |
Correct |
10 ms |
43100 KB |
Output is correct |
17 |
Correct |
9 ms |
43100 KB |
Output is correct |
18 |
Correct |
9 ms |
43100 KB |
Output is correct |
19 |
Correct |
9 ms |
43200 KB |
Output is correct |
20 |
Correct |
9 ms |
43248 KB |
Output is correct |
21 |
Correct |
9 ms |
43096 KB |
Output is correct |
22 |
Correct |
9 ms |
43100 KB |
Output is correct |
23 |
Correct |
9 ms |
43192 KB |
Output is correct |
24 |
Correct |
10 ms |
43100 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
9 ms |
43100 KB |
Output is correct |
2 |
Correct |
9 ms |
43256 KB |
Output is correct |
3 |
Correct |
9 ms |
43100 KB |
Output is correct |
4 |
Correct |
9 ms |
43200 KB |
Output is correct |
5 |
Correct |
8 ms |
43096 KB |
Output is correct |
6 |
Correct |
8 ms |
36956 KB |
Output is correct |
7 |
Correct |
9 ms |
43100 KB |
Output is correct |
8 |
Correct |
9 ms |
43180 KB |
Output is correct |
9 |
Correct |
9 ms |
43100 KB |
Output is correct |
10 |
Correct |
9 ms |
43100 KB |
Output is correct |
11 |
Correct |
9 ms |
43196 KB |
Output is correct |
12 |
Correct |
9 ms |
43316 KB |
Output is correct |
13 |
Correct |
9 ms |
43100 KB |
Output is correct |
14 |
Correct |
9 ms |
43100 KB |
Output is correct |
15 |
Correct |
9 ms |
43100 KB |
Output is correct |
16 |
Correct |
10 ms |
43100 KB |
Output is correct |
17 |
Correct |
9 ms |
43100 KB |
Output is correct |
18 |
Correct |
9 ms |
43100 KB |
Output is correct |
19 |
Correct |
9 ms |
43200 KB |
Output is correct |
20 |
Correct |
9 ms |
43248 KB |
Output is correct |
21 |
Correct |
9 ms |
43096 KB |
Output is correct |
22 |
Correct |
9 ms |
43100 KB |
Output is correct |
23 |
Correct |
9 ms |
43192 KB |
Output is correct |
24 |
Correct |
10 ms |
43100 KB |
Output is correct |
25 |
Correct |
36 ms |
45660 KB |
Output is correct |
26 |
Correct |
26 ms |
44932 KB |
Output is correct |
27 |
Correct |
36 ms |
45648 KB |
Output is correct |
28 |
Correct |
26 ms |
44636 KB |
Output is correct |
29 |
Correct |
286 ms |
165972 KB |
Output is correct |
30 |
Correct |
391 ms |
197720 KB |
Output is correct |
31 |
Correct |
362 ms |
195452 KB |
Output is correct |
32 |
Correct |
262 ms |
150352 KB |
Output is correct |
33 |
Correct |
30 ms |
44932 KB |
Output is correct |
34 |
Correct |
40 ms |
45392 KB |
Output is correct |
35 |
Correct |
26 ms |
44380 KB |
Output is correct |
36 |
Correct |
27 ms |
44636 KB |
Output is correct |
37 |
Correct |
48 ms |
44720 KB |
Output is correct |
38 |
Correct |
84 ms |
45164 KB |
Output is correct |
39 |
Correct |
35 ms |
44112 KB |
Output is correct |
40 |
Correct |
30 ms |
44116 KB |
Output is correct |
41 |
Correct |
19 ms |
43868 KB |
Output is correct |
42 |
Correct |
14 ms |
43712 KB |
Output is correct |
43 |
Correct |
14 ms |
43612 KB |
Output is correct |
44 |
Correct |
17 ms |
43612 KB |
Output is correct |
45 |
Correct |
45 ms |
43720 KB |
Output is correct |
46 |
Correct |
157 ms |
43692 KB |
Output is correct |
47 |
Correct |
904 ms |
43868 KB |
Output is correct |
48 |
Execution timed out |
2061 ms |
43860 KB |
Time limit exceeded |
49 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
9 ms |
43100 KB |
Output is correct |
2 |
Correct |
9 ms |
43256 KB |
Output is correct |
3 |
Correct |
9 ms |
43100 KB |
Output is correct |
4 |
Correct |
9 ms |
43200 KB |
Output is correct |
5 |
Correct |
8 ms |
43096 KB |
Output is correct |
6 |
Correct |
8 ms |
36956 KB |
Output is correct |
7 |
Correct |
9 ms |
43100 KB |
Output is correct |
8 |
Correct |
9 ms |
43180 KB |
Output is correct |
9 |
Correct |
9 ms |
43100 KB |
Output is correct |
10 |
Correct |
9 ms |
43100 KB |
Output is correct |
11 |
Correct |
9 ms |
43196 KB |
Output is correct |
12 |
Correct |
9 ms |
43316 KB |
Output is correct |
13 |
Correct |
9 ms |
43100 KB |
Output is correct |
14 |
Correct |
9 ms |
43100 KB |
Output is correct |
15 |
Correct |
9 ms |
43100 KB |
Output is correct |
16 |
Correct |
10 ms |
43100 KB |
Output is correct |
17 |
Correct |
9 ms |
43100 KB |
Output is correct |
18 |
Correct |
9 ms |
43100 KB |
Output is correct |
19 |
Correct |
9 ms |
43200 KB |
Output is correct |
20 |
Correct |
9 ms |
43248 KB |
Output is correct |
21 |
Correct |
9 ms |
43096 KB |
Output is correct |
22 |
Correct |
9 ms |
43100 KB |
Output is correct |
23 |
Correct |
9 ms |
43192 KB |
Output is correct |
24 |
Correct |
10 ms |
43100 KB |
Output is correct |
25 |
Correct |
36 ms |
45660 KB |
Output is correct |
26 |
Correct |
26 ms |
44932 KB |
Output is correct |
27 |
Correct |
36 ms |
45648 KB |
Output is correct |
28 |
Correct |
26 ms |
44636 KB |
Output is correct |
29 |
Correct |
286 ms |
165972 KB |
Output is correct |
30 |
Correct |
391 ms |
197720 KB |
Output is correct |
31 |
Correct |
362 ms |
195452 KB |
Output is correct |
32 |
Correct |
262 ms |
150352 KB |
Output is correct |
33 |
Correct |
30 ms |
44932 KB |
Output is correct |
34 |
Correct |
40 ms |
45392 KB |
Output is correct |
35 |
Correct |
26 ms |
44380 KB |
Output is correct |
36 |
Correct |
27 ms |
44636 KB |
Output is correct |
37 |
Correct |
48 ms |
44720 KB |
Output is correct |
38 |
Correct |
84 ms |
45164 KB |
Output is correct |
39 |
Correct |
35 ms |
44112 KB |
Output is correct |
40 |
Correct |
30 ms |
44116 KB |
Output is correct |
41 |
Correct |
19 ms |
43868 KB |
Output is correct |
42 |
Correct |
14 ms |
43712 KB |
Output is correct |
43 |
Correct |
14 ms |
43612 KB |
Output is correct |
44 |
Correct |
17 ms |
43612 KB |
Output is correct |
45 |
Correct |
45 ms |
43720 KB |
Output is correct |
46 |
Correct |
157 ms |
43692 KB |
Output is correct |
47 |
Correct |
904 ms |
43868 KB |
Output is correct |
48 |
Execution timed out |
2061 ms |
43860 KB |
Time limit exceeded |
49 |
Halted |
0 ms |
0 KB |
- |