Submission #966673

# Submission time Handle Problem Language Result Execution time Memory
966673 2024-04-20T08:03:03 Z Pring Bitaro’s Party (JOI18_bitaro) C++17
14 / 100
1672 ms 272272 KB
#include <bits/stdc++.h>
#pragma GCC optimize("O3","unroll-loops")
#pragma GCC target("avx2","popcnt","sse4","abm")
using namespace std;

#ifdef MIKU
string dbmc = "\033[1;38;2;57;197;187m", dbrs = "\033[0m";
#define debug(x...) cout << dbmc << "[" << #x << "]: ", dout(x)
void dout() { cout << dbrs << endl; }
template <typename T, typename ...U>
void dout(T t, U ...u) { cout << t << (sizeof...(u) ? ", " : ""); dout(u...); }
#else
#define debug(...) 39
#endif

#define fs first
#define sc second
#define mp make_pair
#define FOR(i, j, k) for (int i = j, Z = k; i < Z; i++)
using ll = long long;
typedef pair<int, int> pii;

const int MXN = 100005, K = 280, INF = 1e9;
int n, m, q;
vector<int> edge[MXN], edge_inv[MXN];
bitset<MXN> b;
int dis[MXN];
vector<pii> w[MXN];

void MERGE(vector<pii> &a, vector<pii> &b, vector<pii> &c) {
    c.clear();
    for (int i = 0, j = 0; i < a.size() || j < b.size(); ) {
        if (i == a.size()) c.push_back(b[j++]);
        else if (j == b.size()) c.push_back(a[i++]);
        else if (a[i].sc < b[i].sc) c.push_back(b[j++]);
        else c.push_back(a[i++]);
    }
}

void DP(int id) {
    vector<pii> a, bb, c;
    a.push_back(mp(id, 0));
    for (auto pre : edge_inv[id]) {
        for (auto [id, len] : w[pre]) bb.push_back(mp(id, len + 1));
        MERGE(a, bb, c);
        a.clear();
        bb.clear();
        for (auto [id, len] : c) {
            if (b[id]) continue;
            b[id] = true;
            a.push_back(mp(id, len));
        }
        for (auto &[i, _] : a) b[i] = false;
        while (a.size() > K + 5) a.pop_back();
    }
    w[id] = a;
}

void TS(int sr) {
    fill(dis + 1, dis + n + 1, -INF);
    dis[sr] = 0;
    for (int id = sr - 1; id; id--) {
        for (auto &i : edge[id]) dis[id] = max(dis[id], dis[i] + 1);
    }
}

int calc(int t, vector<int> &v) {
    if (v.size() <= K) {
        for (auto [i, x] : w[t]) {
            if (b[i]) continue;
            return x;
        }
        return -1;
    } else {
        TS(t);
        int ans = -1;
        FOR(i, 1, t + 1) {
            if (b[i]) continue;
            ans = max(ans, dis[i]);
        }
        return ans;
    }
    return 0;
}

void miku() {
    cin >> n >> m >> q;
    while (m--) {
        int x, y;
        cin >> x >> y;
        edge[x].push_back(y);
        edge_inv[y].push_back(x);
    }
    FOR(i, 1, n + 1) DP(i);
    while (q--) {
        int t, y;
        vector<int> v;
        cin >> t >> y;
        v.resize(y);
        for (auto &i : v) {
            cin >> i;
            b[i] = true;
        }
        cout << calc(t, v) << '\n';
        for (auto &i : v) {
            b[i] = false;
        }
    }
    // FOR(i, 1, n + 1) {
    //     debug(i);
    //     for (auto &[id, x] : w[i]) debug(id, x);
    // }
}

int32_t main() {
    cin.tie(0) -> sync_with_stdio(false);
    cin.exceptions(cin.failbit);
    miku();
    return 0;
}

Compilation message

bitaro.cpp: In function 'void MERGE(std::vector<std::pair<int, int> >&, std::vector<std::pair<int, int> >&, std::vector<std::pair<int, int> >&)':
bitaro.cpp:32:30: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   32 |     for (int i = 0, j = 0; i < a.size() || j < b.size(); ) {
      |                            ~~^~~~~~~~~~
bitaro.cpp:32:46: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   32 |     for (int i = 0, j = 0; i < a.size() || j < b.size(); ) {
      |                                            ~~^~~~~~~~~~
bitaro.cpp:33:15: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   33 |         if (i == a.size()) c.push_back(b[j++]);
      |             ~~^~~~~~~~~~~
bitaro.cpp:34:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   34 |         else if (j == b.size()) c.push_back(a[i++]);
      |                  ~~^~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 2 ms 7772 KB Output is correct
2 Correct 2 ms 7772 KB Output is correct
3 Correct 3 ms 7772 KB Output is correct
4 Correct 3 ms 7772 KB Output is correct
5 Correct 5 ms 8284 KB Output is correct
6 Correct 5 ms 8224 KB Output is correct
7 Correct 5 ms 8284 KB Output is correct
8 Correct 15 ms 10100 KB Output is correct
9 Correct 15 ms 10076 KB Output is correct
10 Correct 19 ms 10076 KB Output is correct
11 Correct 14 ms 9880 KB Output is correct
12 Correct 9 ms 8792 KB Output is correct
13 Correct 14 ms 9820 KB Output is correct
14 Correct 12 ms 9196 KB Output is correct
15 Correct 7 ms 8540 KB Output is correct
16 Correct 11 ms 9052 KB Output is correct
17 Correct 10 ms 9288 KB Output is correct
18 Correct 7 ms 8540 KB Output is correct
19 Correct 11 ms 9308 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 7772 KB Output is correct
2 Correct 2 ms 7772 KB Output is correct
3 Correct 3 ms 7772 KB Output is correct
4 Correct 3 ms 7772 KB Output is correct
5 Correct 5 ms 8284 KB Output is correct
6 Correct 5 ms 8224 KB Output is correct
7 Correct 5 ms 8284 KB Output is correct
8 Correct 15 ms 10100 KB Output is correct
9 Correct 15 ms 10076 KB Output is correct
10 Correct 19 ms 10076 KB Output is correct
11 Correct 14 ms 9880 KB Output is correct
12 Correct 9 ms 8792 KB Output is correct
13 Correct 14 ms 9820 KB Output is correct
14 Correct 12 ms 9196 KB Output is correct
15 Correct 7 ms 8540 KB Output is correct
16 Correct 11 ms 9052 KB Output is correct
17 Correct 10 ms 9288 KB Output is correct
18 Correct 7 ms 8540 KB Output is correct
19 Correct 11 ms 9308 KB Output is correct
20 Correct 997 ms 13992 KB Output is correct
21 Correct 1012 ms 13632 KB Output is correct
22 Correct 983 ms 13952 KB Output is correct
23 Correct 1105 ms 14072 KB Output is correct
24 Correct 1069 ms 163100 KB Output is correct
25 Correct 1080 ms 170272 KB Output is correct
26 Correct 1065 ms 170276 KB Output is correct
27 Correct 1551 ms 270880 KB Output is correct
28 Correct 1598 ms 271060 KB Output is correct
29 Correct 1570 ms 271236 KB Output is correct
30 Correct 1477 ms 270608 KB Output is correct
31 Correct 1425 ms 262540 KB Output is correct
32 Correct 1536 ms 270360 KB Output is correct
33 Correct 1074 ms 167676 KB Output is correct
34 Correct 999 ms 138456 KB Output is correct
35 Correct 1059 ms 166312 KB Output is correct
36 Correct 1353 ms 221572 KB Output is correct
37 Correct 1219 ms 199576 KB Output is correct
38 Correct 1319 ms 222220 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 7772 KB Output is correct
2 Correct 2 ms 7772 KB Output is correct
3 Correct 3 ms 7772 KB Output is correct
4 Correct 3 ms 7772 KB Output is correct
5 Correct 5 ms 8284 KB Output is correct
6 Correct 5 ms 8224 KB Output is correct
7 Correct 5 ms 8284 KB Output is correct
8 Correct 15 ms 10100 KB Output is correct
9 Correct 15 ms 10076 KB Output is correct
10 Correct 19 ms 10076 KB Output is correct
11 Correct 14 ms 9880 KB Output is correct
12 Correct 9 ms 8792 KB Output is correct
13 Correct 14 ms 9820 KB Output is correct
14 Correct 12 ms 9196 KB Output is correct
15 Correct 7 ms 8540 KB Output is correct
16 Correct 11 ms 9052 KB Output is correct
17 Correct 10 ms 9288 KB Output is correct
18 Correct 7 ms 8540 KB Output is correct
19 Correct 11 ms 9308 KB Output is correct
20 Correct 997 ms 13992 KB Output is correct
21 Correct 1012 ms 13632 KB Output is correct
22 Correct 983 ms 13952 KB Output is correct
23 Correct 1105 ms 14072 KB Output is correct
24 Correct 1069 ms 163100 KB Output is correct
25 Correct 1080 ms 170272 KB Output is correct
26 Correct 1065 ms 170276 KB Output is correct
27 Correct 1551 ms 270880 KB Output is correct
28 Correct 1598 ms 271060 KB Output is correct
29 Correct 1570 ms 271236 KB Output is correct
30 Correct 1477 ms 270608 KB Output is correct
31 Correct 1425 ms 262540 KB Output is correct
32 Correct 1536 ms 270360 KB Output is correct
33 Correct 1074 ms 167676 KB Output is correct
34 Correct 999 ms 138456 KB Output is correct
35 Correct 1059 ms 166312 KB Output is correct
36 Correct 1353 ms 221572 KB Output is correct
37 Correct 1219 ms 199576 KB Output is correct
38 Correct 1319 ms 222220 KB Output is correct
39 Correct 1082 ms 165720 KB Output is correct
40 Correct 1062 ms 166536 KB Output is correct
41 Correct 1044 ms 168400 KB Output is correct
42 Correct 1094 ms 167288 KB Output is correct
43 Correct 1074 ms 166984 KB Output is correct
44 Correct 1014 ms 15136 KB Output is correct
45 Correct 990 ms 14368 KB Output is correct
46 Correct 984 ms 14316 KB Output is correct
47 Correct 1012 ms 13952 KB Output is correct
48 Correct 1010 ms 13912 KB Output is correct
49 Correct 1663 ms 272272 KB Output is correct
50 Correct 1672 ms 271048 KB Output is correct
51 Correct 995 ms 14660 KB Output is correct
52 Correct 1000 ms 13896 KB Output is correct
53 Incorrect 1409 ms 221680 KB Output isn't correct
54 Halted 0 ms 0 KB -