Submission #137012

# Submission time Handle Problem Language Result Execution time Memory
137012 2019-07-26T22:18:48 Z thebes Mousetrap (CEOI17_mousetrap) C++14
25 / 100
1357 ms 96188 KB
#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);
         ~~~~~^~~~~~~~~~~~~~
# Verdict Execution time Memory 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 -
# Verdict Execution time Memory 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
# Verdict Execution time Memory 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 -
# Verdict Execution time Memory 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 -