Submission #878662

#TimeUsernameProblemLanguageResultExecution timeMemory
878662Faisal_SaqibMousetrap (CEOI17_mousetrap)C++17
0 / 100
799 ms60216 KiB
#include <iostream> #include <vector> using namespace std; const int N=1e6+2; vector<int> ma[N]; int dp[N]; // dp[x] = def = what is the minimum number of step(Of Kalu ustad) return back to x,such that the subtree of x are the only cities you can go to int n,t,m; void dfs(int x,int p=-1) { if(x==t or (p!=-1 and ma[x].size()==1)) return; int total=0; for(auto y:ma[x]) { if(y!=p) { dfs(y,x); total++; } } int mx=0; int mx2=0; for(auto y:ma[x]) { if(y!=p) { dp[y]++; if(dp[y]>mx) { mx2=mx; mx=dp[y]; } else if(dp[y]>mx2) { mx2=dp[y]; } } } dp[x]=mx2+total-1-(x==m); } int main() { cin>>n>>t>>m; for(int i=1;i<n;i++) { int x,y; cin>>x>>y; ma[x].push_back(y); ma[y].push_back(x); } dfs(m); cout<<dp[m]<<endl; 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...