Submission #1038295

#TimeUsernameProblemLanguageResultExecution timeMemory
1038295MMihalevHard route (IZhO17_road)C++14
19 / 100
163 ms42844 KiB
#include<iostream> #include<algorithm> #include<iomanip> #include<cmath> #include<cstring> #include<vector> #include<queue> #include<stack> #include<tuple> #include<set> #include<map> #include<random> #include<chrono> using namespace std; const int MAX_N=5e5+5; int maxd[MAX_N]; int maxd2[MAX_N]; int dp[MAX_N]; vector<int>g[MAX_N]; int n; int cnt[MAX_N]; int depth[MAX_N]; int ans; void dfsdown(int u,int par) { for(int v:g[u]) { if(v==par)continue; depth[v]=depth[u]+1; dfsdown(v,u); if(maxd[v]+1>maxd[u]) { maxd2[u]=maxd[u]; maxd[u]=maxd[v]+1; } else if(maxd[v]+1==maxd[u]) { maxd2[u]=maxd[u]; } } } void dfsup(int u,int par) { for(int v:g[u]) { if(v==par)continue; int cur=maxd[u]; if(maxd[v]+1==maxd[u])cur=maxd2[u]; dp[v]=max(dp[u],cur); dfsup(v,u); } } void solvefor(int root) { for(int i=1;i<=n;i++) { maxd[i]=0; maxd2[i]=0; dp[i]=0; depth[i]=0; } dfsdown(root,0); dfsup(root,0); for(int i=1;i<=n;i++) { if(g[i].size()!=1 or i==root)continue; int curhardness=depth[i]*dp[i]; cnt[curhardness]++; ans=max(ans,curhardness); } } signed main() { ios_base::sync_with_stdio(0); cin.tie(NULL); cout.tie(NULL); cin>>n; for(int i=1;i<n;i++) { int u,v; cin>>u>>v; g[u].push_back(v); g[v].push_back(u); } for(int i=1;i<=n;i++) { if(g[i].size()!=1)continue; solvefor(i); } cout<<ans<<" "<<cnt[ans]/2<<"\n"; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...