답안 #657508

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
657508 2022-11-10T02:03:15 Z Lobo From Hacks to Snitches (BOI21_watchmen) C++17
25 / 100
6000 ms 94616 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;
                }
            }
        }
        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 70 ms 15384 KB Output is correct
2 Correct 160 ms 22516 KB Output is correct
3 Correct 119 ms 21948 KB Output is correct
4 Correct 135 ms 21948 KB Output is correct
5 Correct 9 ms 14420 KB Output is correct
6 Correct 102 ms 21824 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 70 ms 15308 KB Output is correct
2 Correct 119 ms 22500 KB Output is correct
3 Correct 114 ms 21980 KB Output is correct
4 Correct 137 ms 21964 KB Output is correct
5 Correct 9 ms 14420 KB Output is correct
6 Correct 108 ms 21892 KB Output is correct
7 Correct 119 ms 21880 KB Output is correct
8 Correct 107 ms 21912 KB Output is correct
9 Correct 107 ms 21816 KB Output is correct
10 Correct 121 ms 22116 KB Output is correct
11 Correct 104 ms 21868 KB Output is correct
12 Correct 122 ms 21844 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 70 ms 15308 KB Output is correct
2 Correct 119 ms 22500 KB Output is correct
3 Correct 114 ms 21980 KB Output is correct
4 Correct 137 ms 21964 KB Output is correct
5 Correct 9 ms 14420 KB Output is correct
6 Correct 108 ms 21892 KB Output is correct
7 Correct 119 ms 21880 KB Output is correct
8 Correct 107 ms 21912 KB Output is correct
9 Correct 107 ms 21816 KB Output is correct
10 Correct 121 ms 22116 KB Output is correct
11 Correct 104 ms 21868 KB Output is correct
12 Correct 122 ms 21844 KB Output is correct
13 Correct 68 ms 15316 KB Output is correct
14 Correct 103 ms 22424 KB Output is correct
15 Correct 115 ms 21996 KB Output is correct
16 Correct 160 ms 22048 KB Output is correct
17 Correct 9 ms 14420 KB Output is correct
18 Correct 116 ms 21904 KB Output is correct
19 Correct 104 ms 21852 KB Output is correct
20 Correct 101 ms 21800 KB Output is correct
21 Correct 130 ms 21964 KB Output is correct
22 Correct 108 ms 22048 KB Output is correct
23 Correct 117 ms 21980 KB Output is correct
24 Correct 112 ms 21844 KB Output is correct
25 Correct 2653 ms 66076 KB Output is correct
26 Correct 2544 ms 71324 KB Output is correct
27 Correct 2483 ms 67024 KB Output is correct
28 Correct 2327 ms 70724 KB Output is correct
29 Correct 3184 ms 61676 KB Output is correct
30 Correct 3527 ms 64852 KB Output is correct
31 Correct 2752 ms 71340 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 70 ms 15308 KB Output is correct
2 Correct 119 ms 22500 KB Output is correct
3 Correct 114 ms 21980 KB Output is correct
4 Correct 137 ms 21964 KB Output is correct
5 Correct 9 ms 14420 KB Output is correct
6 Correct 108 ms 21892 KB Output is correct
7 Correct 119 ms 21880 KB Output is correct
8 Correct 107 ms 21912 KB Output is correct
9 Correct 107 ms 21816 KB Output is correct
10 Correct 121 ms 22116 KB Output is correct
11 Correct 104 ms 21868 KB Output is correct
12 Correct 122 ms 21844 KB Output is correct
13 Correct 68 ms 15316 KB Output is correct
14 Correct 103 ms 22424 KB Output is correct
15 Correct 115 ms 21996 KB Output is correct
16 Correct 160 ms 22048 KB Output is correct
17 Correct 9 ms 14420 KB Output is correct
18 Correct 116 ms 21904 KB Output is correct
19 Correct 104 ms 21852 KB Output is correct
20 Correct 101 ms 21800 KB Output is correct
21 Correct 130 ms 21964 KB Output is correct
22 Correct 108 ms 22048 KB Output is correct
23 Correct 117 ms 21980 KB Output is correct
24 Correct 112 ms 21844 KB Output is correct
25 Correct 2653 ms 66076 KB Output is correct
26 Correct 2544 ms 71324 KB Output is correct
27 Correct 2483 ms 67024 KB Output is correct
28 Correct 2327 ms 70724 KB Output is correct
29 Correct 3184 ms 61676 KB Output is correct
30 Correct 3527 ms 64852 KB Output is correct
31 Correct 2752 ms 71340 KB Output is correct
32 Correct 83 ms 15368 KB Output is correct
33 Correct 130 ms 22472 KB Output is correct
34 Correct 114 ms 22036 KB Output is correct
35 Correct 164 ms 22028 KB Output is correct
36 Correct 9 ms 14476 KB Output is correct
37 Correct 101 ms 21792 KB Output is correct
38 Correct 125 ms 21836 KB Output is correct
39 Correct 101 ms 21892 KB Output is correct
40 Correct 121 ms 21812 KB Output is correct
41 Correct 120 ms 22124 KB Output is correct
42 Correct 106 ms 21984 KB Output is correct
43 Correct 123 ms 21836 KB Output is correct
44 Correct 2874 ms 65988 KB Output is correct
45 Correct 2771 ms 71168 KB Output is correct
46 Correct 2383 ms 66888 KB Output is correct
47 Correct 2315 ms 70888 KB Output is correct
48 Correct 3138 ms 61392 KB Output is correct
49 Correct 3604 ms 64988 KB Output is correct
50 Correct 2800 ms 71212 KB Output is correct
51 Correct 3117 ms 80096 KB Output is correct
52 Correct 3308 ms 94616 KB Output is correct
53 Correct 2896 ms 78308 KB Output is correct
54 Correct 2130 ms 63992 KB Output is correct
55 Execution timed out 6067 ms 80912 KB Time limit exceeded
56 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 70 ms 15384 KB Output is correct
2 Correct 160 ms 22516 KB Output is correct
3 Correct 119 ms 21948 KB Output is correct
4 Correct 135 ms 21948 KB Output is correct
5 Correct 9 ms 14420 KB Output is correct
6 Correct 102 ms 21824 KB Output is correct
7 Correct 70 ms 15308 KB Output is correct
8 Correct 119 ms 22500 KB Output is correct
9 Correct 114 ms 21980 KB Output is correct
10 Correct 137 ms 21964 KB Output is correct
11 Correct 9 ms 14420 KB Output is correct
12 Correct 108 ms 21892 KB Output is correct
13 Correct 119 ms 21880 KB Output is correct
14 Correct 107 ms 21912 KB Output is correct
15 Correct 107 ms 21816 KB Output is correct
16 Correct 121 ms 22116 KB Output is correct
17 Correct 104 ms 21868 KB Output is correct
18 Correct 122 ms 21844 KB Output is correct
19 Correct 8 ms 14420 KB Output is correct
20 Correct 8 ms 14360 KB Output is correct
21 Correct 8 ms 14416 KB Output is correct
22 Correct 81 ms 15372 KB Output is correct
23 Correct 117 ms 22420 KB Output is correct
24 Correct 120 ms 21952 KB Output is correct
25 Correct 149 ms 21996 KB Output is correct
26 Correct 9 ms 14420 KB Output is correct
27 Correct 111 ms 21844 KB Output is correct
28 Correct 107 ms 21876 KB Output is correct
29 Correct 120 ms 21888 KB Output is correct
30 Correct 128 ms 21808 KB Output is correct
31 Correct 118 ms 22120 KB Output is correct
32 Correct 121 ms 21984 KB Output is correct
33 Correct 130 ms 21916 KB Output is correct
34 Correct 2614 ms 66056 KB Output is correct
35 Correct 2764 ms 62424 KB Output is correct
36 Correct 2641 ms 62464 KB Output is correct
37 Incorrect 2343 ms 67536 KB Output isn't correct
38 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 70 ms 15384 KB Output is correct
2 Correct 160 ms 22516 KB Output is correct
3 Correct 119 ms 21948 KB Output is correct
4 Correct 135 ms 21948 KB Output is correct
5 Correct 9 ms 14420 KB Output is correct
6 Correct 102 ms 21824 KB Output is correct
7 Correct 70 ms 15308 KB Output is correct
8 Correct 119 ms 22500 KB Output is correct
9 Correct 114 ms 21980 KB Output is correct
10 Correct 137 ms 21964 KB Output is correct
11 Correct 9 ms 14420 KB Output is correct
12 Correct 108 ms 21892 KB Output is correct
13 Correct 119 ms 21880 KB Output is correct
14 Correct 107 ms 21912 KB Output is correct
15 Correct 107 ms 21816 KB Output is correct
16 Correct 121 ms 22116 KB Output is correct
17 Correct 104 ms 21868 KB Output is correct
18 Correct 122 ms 21844 KB Output is correct
19 Correct 68 ms 15316 KB Output is correct
20 Correct 103 ms 22424 KB Output is correct
21 Correct 115 ms 21996 KB Output is correct
22 Correct 160 ms 22048 KB Output is correct
23 Correct 9 ms 14420 KB Output is correct
24 Correct 116 ms 21904 KB Output is correct
25 Correct 104 ms 21852 KB Output is correct
26 Correct 101 ms 21800 KB Output is correct
27 Correct 130 ms 21964 KB Output is correct
28 Correct 108 ms 22048 KB Output is correct
29 Correct 117 ms 21980 KB Output is correct
30 Correct 112 ms 21844 KB Output is correct
31 Correct 2653 ms 66076 KB Output is correct
32 Correct 2544 ms 71324 KB Output is correct
33 Correct 2483 ms 67024 KB Output is correct
34 Correct 2327 ms 70724 KB Output is correct
35 Correct 3184 ms 61676 KB Output is correct
36 Correct 3527 ms 64852 KB Output is correct
37 Correct 2752 ms 71340 KB Output is correct
38 Correct 8 ms 14420 KB Output is correct
39 Correct 8 ms 14360 KB Output is correct
40 Correct 8 ms 14416 KB Output is correct
41 Correct 81 ms 15372 KB Output is correct
42 Correct 117 ms 22420 KB Output is correct
43 Correct 120 ms 21952 KB Output is correct
44 Correct 149 ms 21996 KB Output is correct
45 Correct 9 ms 14420 KB Output is correct
46 Correct 111 ms 21844 KB Output is correct
47 Correct 107 ms 21876 KB Output is correct
48 Correct 120 ms 21888 KB Output is correct
49 Correct 128 ms 21808 KB Output is correct
50 Correct 118 ms 22120 KB Output is correct
51 Correct 121 ms 21984 KB Output is correct
52 Correct 130 ms 21916 KB Output is correct
53 Correct 2614 ms 66056 KB Output is correct
54 Correct 2764 ms 62424 KB Output is correct
55 Correct 2641 ms 62464 KB Output is correct
56 Incorrect 2343 ms 67536 KB Output isn't correct
57 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 70 ms 15384 KB Output is correct
2 Correct 160 ms 22516 KB Output is correct
3 Correct 119 ms 21948 KB Output is correct
4 Correct 135 ms 21948 KB Output is correct
5 Correct 9 ms 14420 KB Output is correct
6 Correct 102 ms 21824 KB Output is correct
7 Correct 70 ms 15308 KB Output is correct
8 Correct 119 ms 22500 KB Output is correct
9 Correct 114 ms 21980 KB Output is correct
10 Correct 137 ms 21964 KB Output is correct
11 Correct 9 ms 14420 KB Output is correct
12 Correct 108 ms 21892 KB Output is correct
13 Correct 119 ms 21880 KB Output is correct
14 Correct 107 ms 21912 KB Output is correct
15 Correct 107 ms 21816 KB Output is correct
16 Correct 121 ms 22116 KB Output is correct
17 Correct 104 ms 21868 KB Output is correct
18 Correct 122 ms 21844 KB Output is correct
19 Correct 68 ms 15316 KB Output is correct
20 Correct 103 ms 22424 KB Output is correct
21 Correct 115 ms 21996 KB Output is correct
22 Correct 160 ms 22048 KB Output is correct
23 Correct 9 ms 14420 KB Output is correct
24 Correct 116 ms 21904 KB Output is correct
25 Correct 104 ms 21852 KB Output is correct
26 Correct 101 ms 21800 KB Output is correct
27 Correct 130 ms 21964 KB Output is correct
28 Correct 108 ms 22048 KB Output is correct
29 Correct 117 ms 21980 KB Output is correct
30 Correct 112 ms 21844 KB Output is correct
31 Correct 2653 ms 66076 KB Output is correct
32 Correct 2544 ms 71324 KB Output is correct
33 Correct 2483 ms 67024 KB Output is correct
34 Correct 2327 ms 70724 KB Output is correct
35 Correct 3184 ms 61676 KB Output is correct
36 Correct 3527 ms 64852 KB Output is correct
37 Correct 2752 ms 71340 KB Output is correct
38 Correct 83 ms 15368 KB Output is correct
39 Correct 130 ms 22472 KB Output is correct
40 Correct 114 ms 22036 KB Output is correct
41 Correct 164 ms 22028 KB Output is correct
42 Correct 9 ms 14476 KB Output is correct
43 Correct 101 ms 21792 KB Output is correct
44 Correct 125 ms 21836 KB Output is correct
45 Correct 101 ms 21892 KB Output is correct
46 Correct 121 ms 21812 KB Output is correct
47 Correct 120 ms 22124 KB Output is correct
48 Correct 106 ms 21984 KB Output is correct
49 Correct 123 ms 21836 KB Output is correct
50 Correct 2874 ms 65988 KB Output is correct
51 Correct 2771 ms 71168 KB Output is correct
52 Correct 2383 ms 66888 KB Output is correct
53 Correct 2315 ms 70888 KB Output is correct
54 Correct 3138 ms 61392 KB Output is correct
55 Correct 3604 ms 64988 KB Output is correct
56 Correct 2800 ms 71212 KB Output is correct
57 Correct 3117 ms 80096 KB Output is correct
58 Correct 3308 ms 94616 KB Output is correct
59 Correct 2896 ms 78308 KB Output is correct
60 Correct 2130 ms 63992 KB Output is correct
61 Execution timed out 6067 ms 80912 KB Time limit exceeded
62 Halted 0 ms 0 KB -