Submission #657512

# Submission time Handle Problem Language Result Execution time Memory
657512 2022-11-10T02:07:17 Z Lobo From Hacks to Snitches (BOI21_watchmen) C++17
25 / 100
6000 ms 94604 KB
#include <bits/stdc++.h>
using namespace std;
// #define int long long
#define pb push_back
#define mp make_pair
#define fr first
#define sc second
#define all(x) x.begin(),x.end()

const int inf = 1e9+10;
const int maxn = 3e5+10;

int n, m, k;
int szrt[maxn], idrt[maxn], thrt[maxn], isrt[maxn], nxrt[maxn], pvrt[maxn], dlol[maxn];
vector<int> g[maxn], d[maxn];

int32_t main() {
    // freopen("in.in", "r", stdin);

    cin >> n >> m;
    for(int i = 1; i <= m; i++) {
        int u,v; cin >> u >> v;
        g[u].pb(v);
        g[v].pb(u);
    }

    cin >> k;
    for(int i = 1; i <= k; i++) {
        cin >> szrt[i];
        for(int j = 0; j < szrt[i]; j++) {
            int v; cin >> v;
            idrt[v] = i;
            isrt[v] = 1;
            thrt[v] = j;
        }
    }

    szrt[0] = 1;
    for(int i = 1; i <= n; i++) {
        dlol[i] = inf;
        if(isrt[i]) {
            for(int j = 0; j < szrt[idrt[i]]; j++) {
                d[i].pb(inf);
            }
            int u = i;
            for(auto v : g[u]) {
                if(isrt[v] && idrt[u] == idrt[v] && thrt[v] == (thrt[u]+1)%szrt[idrt[u]]) {
                    nxrt[u] = v;
                }
                if(isrt[v] && idrt[u] == idrt[v] && thrt[u] == (thrt[v]+1)%szrt[idrt[u]]) {
                    pvrt[u] = v;
                }
            }
            assert(pvrt[u] != 0);
        }
        else {
            d[i].pb(inf);
        }

    }

    d[1][0] = 0;
    priority_queue<pair<int,pair<int,int>>, vector<pair<int,pair<int,int>>>, greater<pair<int,pair<int,int>>>> pq;
    pq.push(mp(0,mp(1,0)));
    while(pq.size()) {
        int u = pq.top().sc.fr;
        int t = pq.top().sc.sc;
        int dist = pq.top().fr;
        pq.pop();

        if(t != -1 && dist != d[u][t]) continue;
        if(t == -1 && dist != dlol[u]) continue;

        if(t == -1) {
            for(auto v : g[u]) {
                if(isrt[v]) continue;
                int d1 = dlol[u]+1;
                int t1 = 0;
                if(d[v][t1] > d1) {
                    d[v][t1] = d1;
                    pq.push(mp(d[v][t1],mp(v,t1)));
                }
            }
            continue;
        }

        if(isrt[u]) {
            for(auto v : g[u]) {
                // if(v == nxrt[u] || v == pvrt[u]) {
                if(isrt[v]) {
                    int d1 = d[u][t]+1;
                    int t1 = d1%szrt[idrt[v]];
                    // Vou encontrar o guarda em v ou indo para v
                    // indo para v == u é depois de v e em t1 ele vai estar em u
                    if(t1 == thrt[v] || (thrt[u] == (thrt[v]+1)%szrt[idrt[u]] && t1 == thrt[u])) continue;
                    if(d[v][t1] > d1) {
                        d[v][t1] = d1;
                        pq.push(mp(d[v][t1],mp(v,t1)));
                    }
                }
                
            }
            if(dlol[u] > d[u][t]) {
                dlol[u] = d[u][t];
                pq.push(mp(dlol[u],mp(u,-1)));
            }
        }
        else {
            for(auto v : g[u]) {
                if(isrt[v]) {
                    // d[u][t]+1+i = (thrt[v]+1) MOD
                    // i = trrt[v]-d[u][t] MOD
                    int i = ((thrt[v]-d[u][t])%szrt[idrt[v]]+szrt[idrt[v]])%szrt[idrt[v]];
                    int d1 = d[u][t]+1+i;
                    int t1 = d1%szrt[idrt[v]];
                    if(t1 == thrt[v]) continue;
                    if(d[v][t1] > d1) {
                        d[v][t1] = d1;
                        pq.push(mp(d[v][t1],mp(v,t1)));
                    }
                    d1 = d[u][t]+1;
                    t1 = d1%szrt[idrt[v]];
                    if(t1 == thrt[v]) continue;
                    if(d[v][t1] > d1) {
                        d[v][t1] = d1;
                        pq.push(mp(d[v][t1],mp(v,t1)));
                    }
                }
                else {
                    int d1 = d[u][t]+1;
                    int t1 = 0;
                    if(d[v][t1] > d1) {
                        d[v][t1] = d1;
                        pq.push(mp(d[v][t1],mp(v,t1)));
                    }
                }
            }
        }
    }

    if(d[n][0] == inf) cout << "impossible" << endl;
    else cout << d[n][0] << endl;
}
# Verdict Execution time Memory Grader output
1 Correct 72 ms 15372 KB Output is correct
2 Correct 125 ms 22520 KB Output is correct
3 Correct 100 ms 21956 KB Output is correct
4 Correct 137 ms 22044 KB Output is correct
5 Correct 8 ms 14420 KB Output is correct
6 Correct 135 ms 21916 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 80 ms 15376 KB Output is correct
2 Correct 133 ms 22520 KB Output is correct
3 Correct 100 ms 22004 KB Output is correct
4 Correct 129 ms 21928 KB Output is correct
5 Correct 9 ms 14420 KB Output is correct
6 Correct 146 ms 21868 KB Output is correct
7 Correct 112 ms 21912 KB Output is correct
8 Correct 102 ms 21884 KB Output is correct
9 Correct 122 ms 21880 KB Output is correct
10 Correct 108 ms 22124 KB Output is correct
11 Correct 101 ms 21872 KB Output is correct
12 Correct 126 ms 21832 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 80 ms 15376 KB Output is correct
2 Correct 133 ms 22520 KB Output is correct
3 Correct 100 ms 22004 KB Output is correct
4 Correct 129 ms 21928 KB Output is correct
5 Correct 9 ms 14420 KB Output is correct
6 Correct 146 ms 21868 KB Output is correct
7 Correct 112 ms 21912 KB Output is correct
8 Correct 102 ms 21884 KB Output is correct
9 Correct 122 ms 21880 KB Output is correct
10 Correct 108 ms 22124 KB Output is correct
11 Correct 101 ms 21872 KB Output is correct
12 Correct 126 ms 21832 KB Output is correct
13 Correct 71 ms 15372 KB Output is correct
14 Correct 123 ms 22528 KB Output is correct
15 Correct 153 ms 21984 KB Output is correct
16 Correct 166 ms 21980 KB Output is correct
17 Correct 10 ms 14420 KB Output is correct
18 Correct 129 ms 21888 KB Output is correct
19 Correct 125 ms 21896 KB Output is correct
20 Correct 114 ms 21912 KB Output is correct
21 Correct 135 ms 21820 KB Output is correct
22 Correct 136 ms 22048 KB Output is correct
23 Correct 120 ms 21972 KB Output is correct
24 Correct 105 ms 21848 KB Output is correct
25 Correct 2780 ms 66004 KB Output is correct
26 Correct 2791 ms 71224 KB Output is correct
27 Correct 2539 ms 66980 KB Output is correct
28 Correct 2293 ms 70796 KB Output is correct
29 Correct 3354 ms 61364 KB Output is correct
30 Correct 3811 ms 64872 KB Output is correct
31 Correct 2872 ms 71324 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 80 ms 15376 KB Output is correct
2 Correct 133 ms 22520 KB Output is correct
3 Correct 100 ms 22004 KB Output is correct
4 Correct 129 ms 21928 KB Output is correct
5 Correct 9 ms 14420 KB Output is correct
6 Correct 146 ms 21868 KB Output is correct
7 Correct 112 ms 21912 KB Output is correct
8 Correct 102 ms 21884 KB Output is correct
9 Correct 122 ms 21880 KB Output is correct
10 Correct 108 ms 22124 KB Output is correct
11 Correct 101 ms 21872 KB Output is correct
12 Correct 126 ms 21832 KB Output is correct
13 Correct 71 ms 15372 KB Output is correct
14 Correct 123 ms 22528 KB Output is correct
15 Correct 153 ms 21984 KB Output is correct
16 Correct 166 ms 21980 KB Output is correct
17 Correct 10 ms 14420 KB Output is correct
18 Correct 129 ms 21888 KB Output is correct
19 Correct 125 ms 21896 KB Output is correct
20 Correct 114 ms 21912 KB Output is correct
21 Correct 135 ms 21820 KB Output is correct
22 Correct 136 ms 22048 KB Output is correct
23 Correct 120 ms 21972 KB Output is correct
24 Correct 105 ms 21848 KB Output is correct
25 Correct 2780 ms 66004 KB Output is correct
26 Correct 2791 ms 71224 KB Output is correct
27 Correct 2539 ms 66980 KB Output is correct
28 Correct 2293 ms 70796 KB Output is correct
29 Correct 3354 ms 61364 KB Output is correct
30 Correct 3811 ms 64872 KB Output is correct
31 Correct 2872 ms 71324 KB Output is correct
32 Correct 69 ms 15372 KB Output is correct
33 Correct 132 ms 22408 KB Output is correct
34 Correct 128 ms 22036 KB Output is correct
35 Correct 202 ms 22044 KB Output is correct
36 Correct 10 ms 14396 KB Output is correct
37 Correct 143 ms 21812 KB Output is correct
38 Correct 150 ms 21864 KB Output is correct
39 Correct 113 ms 21884 KB Output is correct
40 Correct 124 ms 21816 KB Output is correct
41 Correct 132 ms 22108 KB Output is correct
42 Correct 139 ms 21980 KB Output is correct
43 Correct 113 ms 21932 KB Output is correct
44 Correct 2741 ms 65984 KB Output is correct
45 Correct 2673 ms 71240 KB Output is correct
46 Correct 2602 ms 66924 KB Output is correct
47 Correct 2493 ms 70732 KB Output is correct
48 Correct 3359 ms 61400 KB Output is correct
49 Correct 3802 ms 64836 KB Output is correct
50 Correct 3051 ms 71320 KB Output is correct
51 Correct 3551 ms 80032 KB Output is correct
52 Correct 3218 ms 94604 KB Output is correct
53 Correct 3159 ms 78476 KB Output is correct
54 Correct 2179 ms 63916 KB Output is correct
55 Execution timed out 6068 ms 80772 KB Time limit exceeded
56 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 72 ms 15372 KB Output is correct
2 Correct 125 ms 22520 KB Output is correct
3 Correct 100 ms 21956 KB Output is correct
4 Correct 137 ms 22044 KB Output is correct
5 Correct 8 ms 14420 KB Output is correct
6 Correct 135 ms 21916 KB Output is correct
7 Correct 80 ms 15376 KB Output is correct
8 Correct 133 ms 22520 KB Output is correct
9 Correct 100 ms 22004 KB Output is correct
10 Correct 129 ms 21928 KB Output is correct
11 Correct 9 ms 14420 KB Output is correct
12 Correct 146 ms 21868 KB Output is correct
13 Correct 112 ms 21912 KB Output is correct
14 Correct 102 ms 21884 KB Output is correct
15 Correct 122 ms 21880 KB Output is correct
16 Correct 108 ms 22124 KB Output is correct
17 Correct 101 ms 21872 KB Output is correct
18 Correct 126 ms 21832 KB Output is correct
19 Correct 8 ms 14420 KB Output is correct
20 Correct 8 ms 14420 KB Output is correct
21 Correct 8 ms 14420 KB Output is correct
22 Correct 83 ms 15376 KB Output is correct
23 Correct 126 ms 22448 KB Output is correct
24 Correct 109 ms 22012 KB Output is correct
25 Correct 125 ms 21964 KB Output is correct
26 Correct 9 ms 14496 KB Output is correct
27 Correct 137 ms 21828 KB Output is correct
28 Correct 102 ms 21848 KB Output is correct
29 Correct 106 ms 21896 KB Output is correct
30 Correct 101 ms 21816 KB Output is correct
31 Correct 147 ms 22160 KB Output is correct
32 Correct 101 ms 21912 KB Output is correct
33 Correct 106 ms 21848 KB Output is correct
34 Correct 2575 ms 66068 KB Output is correct
35 Correct 2746 ms 62504 KB Output is correct
36 Correct 2823 ms 62592 KB Output is correct
37 Incorrect 2471 ms 67672 KB Output isn't correct
38 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 72 ms 15372 KB Output is correct
2 Correct 125 ms 22520 KB Output is correct
3 Correct 100 ms 21956 KB Output is correct
4 Correct 137 ms 22044 KB Output is correct
5 Correct 8 ms 14420 KB Output is correct
6 Correct 135 ms 21916 KB Output is correct
7 Correct 80 ms 15376 KB Output is correct
8 Correct 133 ms 22520 KB Output is correct
9 Correct 100 ms 22004 KB Output is correct
10 Correct 129 ms 21928 KB Output is correct
11 Correct 9 ms 14420 KB Output is correct
12 Correct 146 ms 21868 KB Output is correct
13 Correct 112 ms 21912 KB Output is correct
14 Correct 102 ms 21884 KB Output is correct
15 Correct 122 ms 21880 KB Output is correct
16 Correct 108 ms 22124 KB Output is correct
17 Correct 101 ms 21872 KB Output is correct
18 Correct 126 ms 21832 KB Output is correct
19 Correct 71 ms 15372 KB Output is correct
20 Correct 123 ms 22528 KB Output is correct
21 Correct 153 ms 21984 KB Output is correct
22 Correct 166 ms 21980 KB Output is correct
23 Correct 10 ms 14420 KB Output is correct
24 Correct 129 ms 21888 KB Output is correct
25 Correct 125 ms 21896 KB Output is correct
26 Correct 114 ms 21912 KB Output is correct
27 Correct 135 ms 21820 KB Output is correct
28 Correct 136 ms 22048 KB Output is correct
29 Correct 120 ms 21972 KB Output is correct
30 Correct 105 ms 21848 KB Output is correct
31 Correct 2780 ms 66004 KB Output is correct
32 Correct 2791 ms 71224 KB Output is correct
33 Correct 2539 ms 66980 KB Output is correct
34 Correct 2293 ms 70796 KB Output is correct
35 Correct 3354 ms 61364 KB Output is correct
36 Correct 3811 ms 64872 KB Output is correct
37 Correct 2872 ms 71324 KB Output is correct
38 Correct 8 ms 14420 KB Output is correct
39 Correct 8 ms 14420 KB Output is correct
40 Correct 8 ms 14420 KB Output is correct
41 Correct 83 ms 15376 KB Output is correct
42 Correct 126 ms 22448 KB Output is correct
43 Correct 109 ms 22012 KB Output is correct
44 Correct 125 ms 21964 KB Output is correct
45 Correct 9 ms 14496 KB Output is correct
46 Correct 137 ms 21828 KB Output is correct
47 Correct 102 ms 21848 KB Output is correct
48 Correct 106 ms 21896 KB Output is correct
49 Correct 101 ms 21816 KB Output is correct
50 Correct 147 ms 22160 KB Output is correct
51 Correct 101 ms 21912 KB Output is correct
52 Correct 106 ms 21848 KB Output is correct
53 Correct 2575 ms 66068 KB Output is correct
54 Correct 2746 ms 62504 KB Output is correct
55 Correct 2823 ms 62592 KB Output is correct
56 Incorrect 2471 ms 67672 KB Output isn't correct
57 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 72 ms 15372 KB Output is correct
2 Correct 125 ms 22520 KB Output is correct
3 Correct 100 ms 21956 KB Output is correct
4 Correct 137 ms 22044 KB Output is correct
5 Correct 8 ms 14420 KB Output is correct
6 Correct 135 ms 21916 KB Output is correct
7 Correct 80 ms 15376 KB Output is correct
8 Correct 133 ms 22520 KB Output is correct
9 Correct 100 ms 22004 KB Output is correct
10 Correct 129 ms 21928 KB Output is correct
11 Correct 9 ms 14420 KB Output is correct
12 Correct 146 ms 21868 KB Output is correct
13 Correct 112 ms 21912 KB Output is correct
14 Correct 102 ms 21884 KB Output is correct
15 Correct 122 ms 21880 KB Output is correct
16 Correct 108 ms 22124 KB Output is correct
17 Correct 101 ms 21872 KB Output is correct
18 Correct 126 ms 21832 KB Output is correct
19 Correct 71 ms 15372 KB Output is correct
20 Correct 123 ms 22528 KB Output is correct
21 Correct 153 ms 21984 KB Output is correct
22 Correct 166 ms 21980 KB Output is correct
23 Correct 10 ms 14420 KB Output is correct
24 Correct 129 ms 21888 KB Output is correct
25 Correct 125 ms 21896 KB Output is correct
26 Correct 114 ms 21912 KB Output is correct
27 Correct 135 ms 21820 KB Output is correct
28 Correct 136 ms 22048 KB Output is correct
29 Correct 120 ms 21972 KB Output is correct
30 Correct 105 ms 21848 KB Output is correct
31 Correct 2780 ms 66004 KB Output is correct
32 Correct 2791 ms 71224 KB Output is correct
33 Correct 2539 ms 66980 KB Output is correct
34 Correct 2293 ms 70796 KB Output is correct
35 Correct 3354 ms 61364 KB Output is correct
36 Correct 3811 ms 64872 KB Output is correct
37 Correct 2872 ms 71324 KB Output is correct
38 Correct 69 ms 15372 KB Output is correct
39 Correct 132 ms 22408 KB Output is correct
40 Correct 128 ms 22036 KB Output is correct
41 Correct 202 ms 22044 KB Output is correct
42 Correct 10 ms 14396 KB Output is correct
43 Correct 143 ms 21812 KB Output is correct
44 Correct 150 ms 21864 KB Output is correct
45 Correct 113 ms 21884 KB Output is correct
46 Correct 124 ms 21816 KB Output is correct
47 Correct 132 ms 22108 KB Output is correct
48 Correct 139 ms 21980 KB Output is correct
49 Correct 113 ms 21932 KB Output is correct
50 Correct 2741 ms 65984 KB Output is correct
51 Correct 2673 ms 71240 KB Output is correct
52 Correct 2602 ms 66924 KB Output is correct
53 Correct 2493 ms 70732 KB Output is correct
54 Correct 3359 ms 61400 KB Output is correct
55 Correct 3802 ms 64836 KB Output is correct
56 Correct 3051 ms 71320 KB Output is correct
57 Correct 3551 ms 80032 KB Output is correct
58 Correct 3218 ms 94604 KB Output is correct
59 Correct 3159 ms 78476 KB Output is correct
60 Correct 2179 ms 63916 KB Output is correct
61 Execution timed out 6068 ms 80772 KB Time limit exceeded
62 Halted 0 ms 0 KB -