Submission #963264

# Submission time Handle Problem Language Result Execution time Memory
963264 2024-04-14T19:50:58 Z TimAni Bitaro’s Party (JOI18_bitaro) C++17
7 / 100
2000 ms 242076 KB
//start-time: 2024-04-14 19:39:32
#include <bits/stdc++.h>

using namespace std;
using ll = long long;

const ll w = 150;

void solve(){
    ll n, m, q;
    cin >> n >> m >> q;
    vector<vector<ll>> g(n);
    vector<vector<ll>> gR(n);
    for(ll i = 0; i < m; i++){
        ll u, v;
        cin >> u >> v;
        u--; v--;
        g[u].push_back(v);
        gR[v].push_back(u);
    }
    
    vector<ll> vis(n), topo;
    auto dfs = [&](ll u, auto&&dfs) -> void {
        vis[u] = 1;
        for(auto v : g[u]){
            if(!vis[v]){
                dfs(v, dfs);
            }
        }
        vis[u] = 2;
        topo.push_back(u);
    };

    for(int i = 0; i < n; i++){
        if(vis[i] == 0){
            dfs(i, dfs);
        }
    }

    reverse(topo.begin(), topo.end());
    
    vector<vector<array<ll, 2>>> dp(n);

    for(auto u : topo){
        vector<ll> val(n, -1), aux;
        aux.push_back(u);
        val[u] = 0;

        for(auto v : gR[u]){
            for(auto [value, ind] : dp[v]){
                aux.push_back(ind);
                val[ind] = max(val[ind], value + 1);
            }
        }

        sort(aux.begin(), aux.end());
        aux.erase(unique(aux.begin(), aux.end()), aux.end());
        sort(aux.begin(), aux.end(), [&](int a, int b){
            return val[a] > val[b];
        });
        for(auto el : aux){
            if(dp[u].size() < w){
                dp[u].push_back({val[el], el});
            }
        }
    }

    for(ll i = 0; i < q; i++){
        ll u, y;
        cin >> u >> y;
        u--;
        vector<bool> c(100'001);
        for(ll j = 0; j < y; j++){
            ll a; cin >> a;
            c[--a] = 1;
        }

        ll ans = -1;
        if(y < w) {
            for(auto [v, i] : dp[u]){
                if(!c[i]){
                    ans = max(ans, v);
                }
            }
        }
        else {
            vector<int> naive(n);
            for(auto v : topo){
                naive[v] = c[v] ? -1 : 0;
                for(auto el : gR[v]){
                    naive[v] = max(naive[v], naive[el] + (naive[el] != -1));
                }
            }
            ans = naive[u];
        }
        
            //for(auto el : naive){
                //cout << el << ' ';
            //}
            //cout << endl;
        cout << ans << endl;
    }
}

int main() {
    cin.tie(0)->sync_with_stdio(0);
    ll T = 1;
    //cin >> T;
    while(T--) solve();
    return 0;
}

# Verdict Execution time Memory Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 1 ms 348 KB Output is correct
3 Correct 0 ms 356 KB Output is correct
4 Correct 1 ms 348 KB Output is correct
5 Correct 4 ms 1388 KB Output is correct
6 Correct 4 ms 1624 KB Output is correct
7 Correct 4 ms 1372 KB Output is correct
8 Correct 9 ms 4188 KB Output is correct
9 Correct 9 ms 4184 KB Output is correct
10 Correct 9 ms 4188 KB Output is correct
11 Correct 12 ms 3932 KB Output is correct
12 Correct 8 ms 2652 KB Output is correct
13 Correct 12 ms 4044 KB Output is correct
14 Correct 8 ms 2648 KB Output is correct
15 Correct 7 ms 1884 KB Output is correct
16 Correct 8 ms 2652 KB Output is correct
17 Correct 9 ms 3032 KB Output is correct
18 Correct 8 ms 2548 KB Output is correct
19 Correct 9 ms 3168 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 1 ms 348 KB Output is correct
3 Correct 0 ms 356 KB Output is correct
4 Correct 1 ms 348 KB Output is correct
5 Correct 4 ms 1388 KB Output is correct
6 Correct 4 ms 1624 KB Output is correct
7 Correct 4 ms 1372 KB Output is correct
8 Correct 9 ms 4188 KB Output is correct
9 Correct 9 ms 4184 KB Output is correct
10 Correct 9 ms 4188 KB Output is correct
11 Correct 12 ms 3932 KB Output is correct
12 Correct 8 ms 2652 KB Output is correct
13 Correct 12 ms 4044 KB Output is correct
14 Correct 8 ms 2648 KB Output is correct
15 Correct 7 ms 1884 KB Output is correct
16 Correct 8 ms 2652 KB Output is correct
17 Correct 9 ms 3032 KB Output is correct
18 Correct 8 ms 2548 KB Output is correct
19 Correct 9 ms 3168 KB Output is correct
20 Correct 782 ms 11356 KB Output is correct
21 Correct 821 ms 11720 KB Output is correct
22 Correct 793 ms 11440 KB Output is correct
23 Correct 967 ms 12412 KB Output is correct
24 Execution timed out 2053 ms 242076 KB Time limit exceeded
25 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 1 ms 348 KB Output is correct
3 Correct 0 ms 356 KB Output is correct
4 Correct 1 ms 348 KB Output is correct
5 Correct 4 ms 1388 KB Output is correct
6 Correct 4 ms 1624 KB Output is correct
7 Correct 4 ms 1372 KB Output is correct
8 Correct 9 ms 4188 KB Output is correct
9 Correct 9 ms 4184 KB Output is correct
10 Correct 9 ms 4188 KB Output is correct
11 Correct 12 ms 3932 KB Output is correct
12 Correct 8 ms 2652 KB Output is correct
13 Correct 12 ms 4044 KB Output is correct
14 Correct 8 ms 2648 KB Output is correct
15 Correct 7 ms 1884 KB Output is correct
16 Correct 8 ms 2652 KB Output is correct
17 Correct 9 ms 3032 KB Output is correct
18 Correct 8 ms 2548 KB Output is correct
19 Correct 9 ms 3168 KB Output is correct
20 Correct 782 ms 11356 KB Output is correct
21 Correct 821 ms 11720 KB Output is correct
22 Correct 793 ms 11440 KB Output is correct
23 Correct 967 ms 12412 KB Output is correct
24 Execution timed out 2053 ms 242076 KB Time limit exceeded
25 Halted 0 ms 0 KB -