Submission #137012

#TimeUsernameProblemLanguageResultExecution timeMemory
137012thebesMousetrap (CEOI17_mousetrap)C++14
25 / 100
1357 ms96188 KiB
#include <bits/stdc++.h> using namespace std; const int MN = 1e6+6; int n, s, t, i, x, y, p[MN], dp[MN], cost[MN], ans, u[MN], d[MN]; vector<int> adj[MN], w[MN], path; priority_queue<int> q; void dfs(int n,int pp,int dd){ p[n] = pp; d[n] = dd; for(auto v : adj[n]){ if(v == pp) continue; dfs(v, n, dd+1); } } void prop(int n,int pp){ if(pp){ for(auto v : adj[n]) if(!u[v]) cost[n]++; if(!u[pp]&&!u[n]) cost[n]--; } for(auto v : adj[n]){ if(v != pp){ cost[v] += cost[n]; prop(v, n); } } } void solve(int n,int pp){ int a=0, b=0; for(auto v : adj[n]){ if(v==pp) continue; solve(v, n); if(dp[v]>a) b=a, a=dp[v]; else if(dp[v]>b) b=dp[v]; } dp[n]=max(b,cost[n]); } int main(){ for(scanf("%d%d%d",&n,&t,&s),i=1;i<n;i++){ scanf("%d%d",&x,&y); adj[x].push_back(y); adj[y].push_back(x); } dfs(s, 0, 1); for(i=t;i;i=p[i]){ path.push_back(i); u[i] = 1; } prop(t, 0); for(auto v : path){ if(v==t) continue; for(auto z : adj[v]){ if(u[z]) continue; solve(z, v); w[d[v]].push_back(dp[z]); } } for(i=n;i>=1;i--){ for(auto v : w[i]) q.push(v); if(q.size()) q.pop(); } printf("%d\n",q.top()); return 0; }

Compilation message (stderr)

mousetrap.cpp: In function 'int main()':
mousetrap.cpp:43:33: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     for(scanf("%d%d%d",&n,&t,&s),i=1;i<n;i++){
         ~~~~~~~~~~~~~~~~~~~~~~~~^~~~
mousetrap.cpp:44:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%d%d",&x,&y);
         ~~~~~^~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...