답안 #657506

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
657506 2022-11-10T01:59:56 Z Lobo From Hacks to Snitches (BOI21_watchmen) C++17
25 / 100
6000 ms 93812 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], 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);
            }
            for(auto v : g[i]) {
                if(isrt[v]) nxrt[i] = v;
            }
        }
        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(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;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 73 ms 15372 KB Output is correct
2 Correct 161 ms 22168 KB Output is correct
3 Correct 133 ms 21672 KB Output is correct
4 Correct 158 ms 21708 KB Output is correct
5 Correct 10 ms 14412 KB Output is correct
6 Correct 137 ms 21644 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 73 ms 15316 KB Output is correct
2 Correct 125 ms 22232 KB Output is correct
3 Correct 104 ms 21664 KB Output is correct
4 Correct 127 ms 21784 KB Output is correct
5 Correct 10 ms 14380 KB Output is correct
6 Correct 109 ms 21548 KB Output is correct
7 Correct 98 ms 21564 KB Output is correct
8 Correct 105 ms 21628 KB Output is correct
9 Correct 110 ms 21648 KB Output is correct
10 Correct 114 ms 21896 KB Output is correct
11 Correct 106 ms 21580 KB Output is correct
12 Correct 109 ms 21672 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 73 ms 15316 KB Output is correct
2 Correct 125 ms 22232 KB Output is correct
3 Correct 104 ms 21664 KB Output is correct
4 Correct 127 ms 21784 KB Output is correct
5 Correct 10 ms 14380 KB Output is correct
6 Correct 109 ms 21548 KB Output is correct
7 Correct 98 ms 21564 KB Output is correct
8 Correct 105 ms 21628 KB Output is correct
9 Correct 110 ms 21648 KB Output is correct
10 Correct 114 ms 21896 KB Output is correct
11 Correct 106 ms 21580 KB Output is correct
12 Correct 109 ms 21672 KB Output is correct
13 Correct 71 ms 15368 KB Output is correct
14 Correct 115 ms 22292 KB Output is correct
15 Correct 109 ms 21756 KB Output is correct
16 Correct 128 ms 21704 KB Output is correct
17 Correct 9 ms 14420 KB Output is correct
18 Correct 118 ms 21648 KB Output is correct
19 Correct 104 ms 21640 KB Output is correct
20 Correct 106 ms 21556 KB Output is correct
21 Correct 108 ms 21536 KB Output is correct
22 Correct 111 ms 21860 KB Output is correct
23 Correct 103 ms 21700 KB Output is correct
24 Correct 106 ms 21624 KB Output is correct
25 Correct 2580 ms 65592 KB Output is correct
26 Correct 2467 ms 70436 KB Output is correct
27 Correct 2355 ms 66412 KB Output is correct
28 Correct 2158 ms 70316 KB Output is correct
29 Correct 3132 ms 61128 KB Output is correct
30 Correct 3288 ms 64168 KB Output is correct
31 Correct 2604 ms 70448 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 73 ms 15316 KB Output is correct
2 Correct 125 ms 22232 KB Output is correct
3 Correct 104 ms 21664 KB Output is correct
4 Correct 127 ms 21784 KB Output is correct
5 Correct 10 ms 14380 KB Output is correct
6 Correct 109 ms 21548 KB Output is correct
7 Correct 98 ms 21564 KB Output is correct
8 Correct 105 ms 21628 KB Output is correct
9 Correct 110 ms 21648 KB Output is correct
10 Correct 114 ms 21896 KB Output is correct
11 Correct 106 ms 21580 KB Output is correct
12 Correct 109 ms 21672 KB Output is correct
13 Correct 71 ms 15368 KB Output is correct
14 Correct 115 ms 22292 KB Output is correct
15 Correct 109 ms 21756 KB Output is correct
16 Correct 128 ms 21704 KB Output is correct
17 Correct 9 ms 14420 KB Output is correct
18 Correct 118 ms 21648 KB Output is correct
19 Correct 104 ms 21640 KB Output is correct
20 Correct 106 ms 21556 KB Output is correct
21 Correct 108 ms 21536 KB Output is correct
22 Correct 111 ms 21860 KB Output is correct
23 Correct 103 ms 21700 KB Output is correct
24 Correct 106 ms 21624 KB Output is correct
25 Correct 2580 ms 65592 KB Output is correct
26 Correct 2467 ms 70436 KB Output is correct
27 Correct 2355 ms 66412 KB Output is correct
28 Correct 2158 ms 70316 KB Output is correct
29 Correct 3132 ms 61128 KB Output is correct
30 Correct 3288 ms 64168 KB Output is correct
31 Correct 2604 ms 70448 KB Output is correct
32 Correct 72 ms 15372 KB Output is correct
33 Correct 133 ms 22116 KB Output is correct
34 Correct 120 ms 21812 KB Output is correct
35 Correct 133 ms 21720 KB Output is correct
36 Correct 9 ms 14420 KB Output is correct
37 Correct 112 ms 21640 KB Output is correct
38 Correct 102 ms 21580 KB Output is correct
39 Correct 108 ms 21576 KB Output is correct
40 Correct 106 ms 21604 KB Output is correct
41 Correct 112 ms 21872 KB Output is correct
42 Correct 110 ms 21672 KB Output is correct
43 Correct 106 ms 21572 KB Output is correct
44 Correct 2540 ms 65672 KB Output is correct
45 Correct 2457 ms 70588 KB Output is correct
46 Correct 2350 ms 66408 KB Output is correct
47 Correct 2075 ms 70236 KB Output is correct
48 Correct 3304 ms 61096 KB Output is correct
49 Correct 3264 ms 64400 KB Output is correct
50 Correct 2584 ms 70648 KB Output is correct
51 Correct 2940 ms 79024 KB Output is correct
52 Correct 3135 ms 93812 KB Output is correct
53 Correct 2892 ms 77400 KB Output is correct
54 Correct 2096 ms 63032 KB Output is correct
55 Execution timed out 6093 ms 79808 KB Time limit exceeded
56 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 73 ms 15372 KB Output is correct
2 Correct 161 ms 22168 KB Output is correct
3 Correct 133 ms 21672 KB Output is correct
4 Correct 158 ms 21708 KB Output is correct
5 Correct 10 ms 14412 KB Output is correct
6 Correct 137 ms 21644 KB Output is correct
7 Correct 73 ms 15316 KB Output is correct
8 Correct 125 ms 22232 KB Output is correct
9 Correct 104 ms 21664 KB Output is correct
10 Correct 127 ms 21784 KB Output is correct
11 Correct 10 ms 14380 KB Output is correct
12 Correct 109 ms 21548 KB Output is correct
13 Correct 98 ms 21564 KB Output is correct
14 Correct 105 ms 21628 KB Output is correct
15 Correct 110 ms 21648 KB Output is correct
16 Correct 114 ms 21896 KB Output is correct
17 Correct 106 ms 21580 KB Output is correct
18 Correct 109 ms 21672 KB Output is correct
19 Correct 11 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 70 ms 15288 KB Output is correct
23 Correct 106 ms 22208 KB Output is correct
24 Correct 112 ms 21708 KB Output is correct
25 Correct 139 ms 21776 KB Output is correct
26 Correct 9 ms 14420 KB Output is correct
27 Correct 104 ms 21600 KB Output is correct
28 Correct 114 ms 21576 KB Output is correct
29 Correct 108 ms 21632 KB Output is correct
30 Correct 109 ms 21636 KB Output is correct
31 Correct 114 ms 21832 KB Output is correct
32 Correct 103 ms 21580 KB Output is correct
33 Correct 102 ms 21668 KB Output is correct
34 Correct 2553 ms 65668 KB Output is correct
35 Correct 2629 ms 62096 KB Output is correct
36 Correct 2628 ms 62152 KB Output is correct
37 Incorrect 2352 ms 67316 KB Output isn't correct
38 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 73 ms 15372 KB Output is correct
2 Correct 161 ms 22168 KB Output is correct
3 Correct 133 ms 21672 KB Output is correct
4 Correct 158 ms 21708 KB Output is correct
5 Correct 10 ms 14412 KB Output is correct
6 Correct 137 ms 21644 KB Output is correct
7 Correct 73 ms 15316 KB Output is correct
8 Correct 125 ms 22232 KB Output is correct
9 Correct 104 ms 21664 KB Output is correct
10 Correct 127 ms 21784 KB Output is correct
11 Correct 10 ms 14380 KB Output is correct
12 Correct 109 ms 21548 KB Output is correct
13 Correct 98 ms 21564 KB Output is correct
14 Correct 105 ms 21628 KB Output is correct
15 Correct 110 ms 21648 KB Output is correct
16 Correct 114 ms 21896 KB Output is correct
17 Correct 106 ms 21580 KB Output is correct
18 Correct 109 ms 21672 KB Output is correct
19 Correct 71 ms 15368 KB Output is correct
20 Correct 115 ms 22292 KB Output is correct
21 Correct 109 ms 21756 KB Output is correct
22 Correct 128 ms 21704 KB Output is correct
23 Correct 9 ms 14420 KB Output is correct
24 Correct 118 ms 21648 KB Output is correct
25 Correct 104 ms 21640 KB Output is correct
26 Correct 106 ms 21556 KB Output is correct
27 Correct 108 ms 21536 KB Output is correct
28 Correct 111 ms 21860 KB Output is correct
29 Correct 103 ms 21700 KB Output is correct
30 Correct 106 ms 21624 KB Output is correct
31 Correct 2580 ms 65592 KB Output is correct
32 Correct 2467 ms 70436 KB Output is correct
33 Correct 2355 ms 66412 KB Output is correct
34 Correct 2158 ms 70316 KB Output is correct
35 Correct 3132 ms 61128 KB Output is correct
36 Correct 3288 ms 64168 KB Output is correct
37 Correct 2604 ms 70448 KB Output is correct
38 Correct 11 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 70 ms 15288 KB Output is correct
42 Correct 106 ms 22208 KB Output is correct
43 Correct 112 ms 21708 KB Output is correct
44 Correct 139 ms 21776 KB Output is correct
45 Correct 9 ms 14420 KB Output is correct
46 Correct 104 ms 21600 KB Output is correct
47 Correct 114 ms 21576 KB Output is correct
48 Correct 108 ms 21632 KB Output is correct
49 Correct 109 ms 21636 KB Output is correct
50 Correct 114 ms 21832 KB Output is correct
51 Correct 103 ms 21580 KB Output is correct
52 Correct 102 ms 21668 KB Output is correct
53 Correct 2553 ms 65668 KB Output is correct
54 Correct 2629 ms 62096 KB Output is correct
55 Correct 2628 ms 62152 KB Output is correct
56 Incorrect 2352 ms 67316 KB Output isn't correct
57 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 73 ms 15372 KB Output is correct
2 Correct 161 ms 22168 KB Output is correct
3 Correct 133 ms 21672 KB Output is correct
4 Correct 158 ms 21708 KB Output is correct
5 Correct 10 ms 14412 KB Output is correct
6 Correct 137 ms 21644 KB Output is correct
7 Correct 73 ms 15316 KB Output is correct
8 Correct 125 ms 22232 KB Output is correct
9 Correct 104 ms 21664 KB Output is correct
10 Correct 127 ms 21784 KB Output is correct
11 Correct 10 ms 14380 KB Output is correct
12 Correct 109 ms 21548 KB Output is correct
13 Correct 98 ms 21564 KB Output is correct
14 Correct 105 ms 21628 KB Output is correct
15 Correct 110 ms 21648 KB Output is correct
16 Correct 114 ms 21896 KB Output is correct
17 Correct 106 ms 21580 KB Output is correct
18 Correct 109 ms 21672 KB Output is correct
19 Correct 71 ms 15368 KB Output is correct
20 Correct 115 ms 22292 KB Output is correct
21 Correct 109 ms 21756 KB Output is correct
22 Correct 128 ms 21704 KB Output is correct
23 Correct 9 ms 14420 KB Output is correct
24 Correct 118 ms 21648 KB Output is correct
25 Correct 104 ms 21640 KB Output is correct
26 Correct 106 ms 21556 KB Output is correct
27 Correct 108 ms 21536 KB Output is correct
28 Correct 111 ms 21860 KB Output is correct
29 Correct 103 ms 21700 KB Output is correct
30 Correct 106 ms 21624 KB Output is correct
31 Correct 2580 ms 65592 KB Output is correct
32 Correct 2467 ms 70436 KB Output is correct
33 Correct 2355 ms 66412 KB Output is correct
34 Correct 2158 ms 70316 KB Output is correct
35 Correct 3132 ms 61128 KB Output is correct
36 Correct 3288 ms 64168 KB Output is correct
37 Correct 2604 ms 70448 KB Output is correct
38 Correct 72 ms 15372 KB Output is correct
39 Correct 133 ms 22116 KB Output is correct
40 Correct 120 ms 21812 KB Output is correct
41 Correct 133 ms 21720 KB Output is correct
42 Correct 9 ms 14420 KB Output is correct
43 Correct 112 ms 21640 KB Output is correct
44 Correct 102 ms 21580 KB Output is correct
45 Correct 108 ms 21576 KB Output is correct
46 Correct 106 ms 21604 KB Output is correct
47 Correct 112 ms 21872 KB Output is correct
48 Correct 110 ms 21672 KB Output is correct
49 Correct 106 ms 21572 KB Output is correct
50 Correct 2540 ms 65672 KB Output is correct
51 Correct 2457 ms 70588 KB Output is correct
52 Correct 2350 ms 66408 KB Output is correct
53 Correct 2075 ms 70236 KB Output is correct
54 Correct 3304 ms 61096 KB Output is correct
55 Correct 3264 ms 64400 KB Output is correct
56 Correct 2584 ms 70648 KB Output is correct
57 Correct 2940 ms 79024 KB Output is correct
58 Correct 3135 ms 93812 KB Output is correct
59 Correct 2892 ms 77400 KB Output is correct
60 Correct 2096 ms 63032 KB Output is correct
61 Execution timed out 6093 ms 79808 KB Time limit exceeded
62 Halted 0 ms 0 KB -