Submission #469131

#TimeUsernameProblemLanguageResultExecution timeMemory
469131ivan_tudorMousetrap (CEOI17_mousetrap)C++14
0 / 100
357 ms70212 KiB
#include<bits/stdc++.h> using namespace std; const int N = 1e6 + 5; int dp[N]; int h[N]; bool viz[N]; vector<int> gr[N]; int par[N]; void first_dfs(int nod, int dad){ par[nod] = dad; h[nod] = 1 + h[dad]; for(auto x:gr[nod]){ if(x != dad) first_dfs(x, nod); } } void dfs(int nod, int dad){ int nrvec = 0; for(auto x:gr[nod]){ if(x == dad || viz[x] == true) continue; nrvec++; dfs(x, nod); } int m1 = 0, m2 = 0; for(auto x:gr[nod]){ if(x == dad || viz[x]) continue; if(nrvec + 1 + dp[x] > m1){ m2 = m1; m1 = nrvec + 1 + dp[x]; } else if(nrvec + 1 + dp[x] > m2){ m2 = nrvec + 1 + dp[x]; } } dp[nod] = m2; } int ans = 0; int solve(int nod, int climbed){ viz[nod] = true; if(par[nod] == 0) return 0; int sum = solve(par[nod], climbed + 1); dfs(nod, 0); ans = max(ans, dp[nod] - climbed + sum); sum += gr[nod].size() - (par[nod] != 0) - 1; return sum; } int main() { //freopen(".in","r",stdin); ios::sync_with_stdio(false); cin.tie(0),cout.tie(0); int n, root, m; cin>>n>>root>>m; for(int i =1 ; i<n; i++){ int x, y; cin>>x>>y; gr[x].push_back(y); gr[y].push_back(x); } first_dfs(root, 0); solve(m, 0); cout<<ans; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...