#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
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);
~~~~~^~~~~~~~~~~~~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
55 ms |
47300 KB |
Output is correct |
2 |
Correct |
44 ms |
47316 KB |
Output is correct |
3 |
Runtime error |
106 ms |
95548 KB |
Execution killed with signal 11 (could be triggered by violating memory limits) |
4 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
522 ms |
95080 KB |
Output is correct |
2 |
Correct |
470 ms |
90360 KB |
Output is correct |
3 |
Correct |
1288 ms |
96184 KB |
Output is correct |
4 |
Correct |
708 ms |
72172 KB |
Output is correct |
5 |
Correct |
1331 ms |
96188 KB |
Output is correct |
6 |
Correct |
1357 ms |
96040 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
55 ms |
47300 KB |
Output is correct |
2 |
Correct |
44 ms |
47316 KB |
Output is correct |
3 |
Runtime error |
106 ms |
95548 KB |
Execution killed with signal 11 (could be triggered by violating memory limits) |
4 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
55 ms |
47300 KB |
Output is correct |
2 |
Correct |
44 ms |
47316 KB |
Output is correct |
3 |
Runtime error |
106 ms |
95548 KB |
Execution killed with signal 11 (could be triggered by violating memory limits) |
4 |
Halted |
0 ms |
0 KB |
- |