Submission #162720

# Submission time Handle Problem Language Result Execution time Memory
162720 2019-11-09T14:08:01 Z HellAngel Mousetrap (CEOI17_mousetrap) C++14
45 / 100
1139 ms 97024 KB
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e6 + 7;
int FastIn()
{
    char c;
    while(true)
    {
        c = getchar();
        if(c >= '0' && c <= '9') break;
    }
    int ans = c- '0';
    while(true)
    {
        c = getchar();
        if(c > '9' || c < '0') return ans;
        ans = ans * 10 + c - '0';
    }
}
int n, m, t, cnt, sum, dp[maxn], cur[maxn];

vector<int> st;

bool found;
vector<int> vt[maxn], path, gau[maxn];

void DFS(int u, int p)
{
    if(u == t)
    {
        path.push_back(u);
        found = true;
        return;
    }
    for(auto v: vt[u])
    {
        if(v == p) continue;
        DFS(v, u);
        if(found)
        {
            path.push_back(u);
            break;
        }
    }
}

void Solve(int u, int p)
{
    vector<int> cac = {};
    int sum = -1;
    for(auto v: vt[u])
    {
        if(v == p) continue;
        Solve(v, u);
        sum++;
        cac.push_back(dp[v]);
    }
    sort(cac.begin(), cac.end());
    if(cac.size())
    {
        cac.pop_back();
        if(cac.size() == 0) dp[u] = 1;
        else dp[u] = sum + cac.back() + 1;
    }
    else dp[u] = 0;
}

bool Check(int x)
{
    st = {};
    for(int i = 0; i + 1 < path.size(); i++)
    {
        cur[i + 1] = (int)gau[i + 1].size() - 1;
        int u = path[i];
        for(auto v: vt[u])
        {
            if(v == path[i + 1]) continue;
            if(i > 0 && v == path[i - 1]) continue;
            if(dp[v] > x) st.push_back(i + 1);
        }
    }
    int cnt = path.size() - 1;
    sort(st.begin(), st.end(), greater<int>());
    for(int i = 1; i <= cnt; i++)
    {
        if(st.empty()) return true;
        cur[st.back()]--;
        st.pop_back();
        if(cur[i] >= 0 && gau[i][cur[i]] > x) return false;

    }
    return true;
}

int32_t main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    if(fopen("test.inp", "r")) freopen("test.inp", "r", stdin), freopen("test.out", "w", stdout);
    cin >> n >> t >> m;
    for(int i = 1; i < n; i++)
    {
        int u, v;
        cin >> u >> v;
        vt[u].push_back(v);
        vt[v].push_back(u);
    }
    DFS(m, m);
    reverse(path.begin(), path.end());
    for(int i = 0; i + 1 < path.size(); i++)
    {
        gau[i + 1] = {};
        int u = path[i];
        for(auto v: vt[u])
        {
            if(v == path[i + 1]) continue;
            if(i > 0 && v == path[i - 1]) continue;
            Solve(v, u);
            sum++;
            gau[i + 1].push_back(dp[v]);
        }
        sort(gau[i + 1].begin(), gau[i + 1].end());
    }
    int l = 0;
    int r = 1e6;
    while(l <= r)
    {
        int mid = l + r >> 1;
        if(Check(mid)) r = mid - 1;
        else l = mid + 1;
    }
    cout << sum + l;
}

Compilation message

mousetrap.cpp: In function 'bool Check(int)':
mousetrap.cpp:71:26: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i = 0; i + 1 < path.size(); i++)
                    ~~~~~~^~~~~~~~~~~~~
mousetrap.cpp: In function 'int32_t main()':
mousetrap.cpp:110:26: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i = 0; i + 1 < path.size(); i++)
                    ~~~~~~^~~~~~~~~~~~~
mousetrap.cpp:128:21: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
         int mid = l + r >> 1;
                   ~~^~~
mousetrap.cpp:99:63: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)', declared with attribute warn_unused_result [-Wunused-result]
     if(fopen("test.inp", "r")) freopen("test.inp", "r", stdin), freopen("test.out", "w", stdout);
                                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
mousetrap.cpp:99:63: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)', declared with attribute warn_unused_result [-Wunused-result]
# Verdict Execution time Memory Grader output
1 Correct 45 ms 47352 KB Output is correct
2 Correct 44 ms 47352 KB Output is correct
3 Correct 44 ms 47292 KB Output is correct
4 Correct 44 ms 47372 KB Output is correct
5 Correct 46 ms 47368 KB Output is correct
6 Correct 45 ms 47408 KB Output is correct
7 Correct 47 ms 47352 KB Output is correct
8 Correct 46 ms 47352 KB Output is correct
9 Correct 44 ms 47336 KB Output is correct
10 Correct 47 ms 47452 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 501 ms 82552 KB Output is correct
2 Correct 458 ms 91088 KB Output is correct
3 Correct 1139 ms 96860 KB Output is correct
4 Correct 545 ms 71928 KB Output is correct
5 Correct 1135 ms 97024 KB Output is correct
6 Correct 1113 ms 96976 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 45 ms 47352 KB Output is correct
2 Correct 44 ms 47352 KB Output is correct
3 Correct 44 ms 47292 KB Output is correct
4 Correct 44 ms 47372 KB Output is correct
5 Correct 46 ms 47368 KB Output is correct
6 Correct 45 ms 47408 KB Output is correct
7 Correct 47 ms 47352 KB Output is correct
8 Correct 46 ms 47352 KB Output is correct
9 Correct 44 ms 47336 KB Output is correct
10 Correct 47 ms 47452 KB Output is correct
11 Correct 45 ms 47352 KB Output is correct
12 Correct 45 ms 47436 KB Output is correct
13 Correct 46 ms 47444 KB Output is correct
14 Correct 45 ms 47480 KB Output is correct
15 Correct 48 ms 47356 KB Output is correct
16 Incorrect 48 ms 47404 KB Output isn't correct
17 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 45 ms 47352 KB Output is correct
2 Correct 44 ms 47352 KB Output is correct
3 Correct 44 ms 47292 KB Output is correct
4 Correct 44 ms 47372 KB Output is correct
5 Correct 46 ms 47368 KB Output is correct
6 Correct 45 ms 47408 KB Output is correct
7 Correct 47 ms 47352 KB Output is correct
8 Correct 46 ms 47352 KB Output is correct
9 Correct 44 ms 47336 KB Output is correct
10 Correct 47 ms 47452 KB Output is correct
11 Correct 501 ms 82552 KB Output is correct
12 Correct 458 ms 91088 KB Output is correct
13 Correct 1139 ms 96860 KB Output is correct
14 Correct 545 ms 71928 KB Output is correct
15 Correct 1135 ms 97024 KB Output is correct
16 Correct 1113 ms 96976 KB Output is correct
17 Correct 45 ms 47352 KB Output is correct
18 Correct 45 ms 47436 KB Output is correct
19 Correct 46 ms 47444 KB Output is correct
20 Correct 45 ms 47480 KB Output is correct
21 Correct 48 ms 47356 KB Output is correct
22 Incorrect 48 ms 47404 KB Output isn't correct
23 Halted 0 ms 0 KB -