답안 #528016

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
528016 2022-02-19T02:21:47 Z 79brue From Hacks to Snitches (BOI21_watchmen) C++14
25 / 100
2793 ms 137432 KB
#include <bits/stdc++.h>
#pragma GCC optimize("O3")
#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")

using namespace std;

typedef long long ll;
const int LIM = 205;

struct dat{
    int x, f, y;
    dat(){}
    dat(int x, int f, int y): x(x), f(f), y(y){}

    bool operator<(const dat &r)const{
        return y>r.y;
    }
};

int n, m, k;
vector<int> link[250002];
int cycleLen[250002];
int cycleIdx[250002];
vector<int> dist[250002];
vector<bool> visited[250002];

queue<dat> pq[LIM+5];

inline void update(dat tmp){
    if(visited[tmp.x][tmp.f]) return;
    visited[tmp.x][tmp.f] = 1;
    dist[tmp.x][tmp.f] = tmp.y;
    pq[tmp.y%LIM].push(tmp);
}

int main(){
    scanf("%d %d", &n, &m);
    for(int i=1; i<=m; i++){
        int x, y;
        scanf("%d %d", &x, &y);
        link[x].push_back(y);
        link[y].push_back(x);
    }

    scanf("%d", &k);
    while(k--){
        int l;
        scanf("%d", &l);
        for(int j=0; j<l; j++){
            int tmp;
            scanf("%d", &tmp);
            cycleLen[tmp] = l;
            cycleIdx[tmp] = j;
        }
    }

    for(int i=1; i<=n; i++){
        if(!cycleLen[i]) cycleLen[i] = 1;
        dist[i] = vector<int> (cycleLen[i], 1e9);
        visited[i].resize(cycleLen[i]);
    }

    update(dat(1, 0, 0));
    for(int d=0; ; d+=LIM){
        bool exist = 0;
        for(int e=0; e<LIM; e++){
            while(!pq[e].empty()){
                exist=1;
                dat tmp = pq[e].front(); pq[e].pop();
                int x = tmp.x, f = tmp.f, y = tmp.y;
                assert(f < cycleLen[x]);

                if(x==n){
                    printf("%d", y);
                    return 0;
                }

                if(cycleLen[x] == 1){
                    for(int nxt: link[x]){
                        if(cycleLen[nxt] == 1) update(dat(nxt, 0, y+1));
                        else{
                            if(cycleIdx[nxt] != (y+1)%cycleLen[nxt]) update(dat(nxt, (y+1)%cycleLen[nxt], y+1));
                            int tn = (y+1-cycleIdx[nxt]-1+cycleLen[nxt]-1) / cycleLen[nxt] * cycleLen[nxt] + cycleIdx[nxt]+1;
                            update(dat(nxt, tn%cycleLen[nxt], tn));
                            for(int i=0; i<(int)visited[nxt].size(); i++) visited[nxt][i] = 1;
                        }
                    }
                }
                else{
                    for(int nxt: link[x]){
                        if(cycleLen[nxt] == 1) update(dat(nxt, 0, y+1));
                        else{
                            int nf = (f+1)%cycleLen[nxt];
                            if(nf == cycleIdx[nxt]) continue;
                            if(nf == cycleIdx[x] && f%cycleLen[nxt] == cycleIdx[nxt]) continue;
                            update(dat(nxt, nf, y+1));
                        }
                    }
                }
            }
        }
        if(!exist) break;
    }

    printf("impossible");
}

Compilation message

watchmen.cpp: In function 'int main()':
watchmen.cpp:38:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   38 |     scanf("%d %d", &n, &m);
      |     ~~~~~^~~~~~~~~~~~~~~~~
watchmen.cpp:41:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   41 |         scanf("%d %d", &x, &y);
      |         ~~~~~^~~~~~~~~~~~~~~~~
watchmen.cpp:46:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   46 |     scanf("%d", &k);
      |     ~~~~~^~~~~~~~~~
watchmen.cpp:49:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   49 |         scanf("%d", &l);
      |         ~~~~~^~~~~~~~~~
watchmen.cpp:52:18: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   52 |             scanf("%d", &tmp);
      |             ~~~~~^~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 31 ms 22860 KB Output is correct
2 Correct 91 ms 31968 KB Output is correct
3 Correct 80 ms 31144 KB Output is correct
4 Correct 80 ms 31308 KB Output is correct
5 Correct 10 ms 21964 KB Output is correct
6 Correct 82 ms 31136 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 33 ms 22816 KB Output is correct
2 Correct 88 ms 32044 KB Output is correct
3 Correct 80 ms 31080 KB Output is correct
4 Correct 81 ms 31280 KB Output is correct
5 Correct 12 ms 22000 KB Output is correct
6 Correct 83 ms 31136 KB Output is correct
7 Correct 82 ms 31120 KB Output is correct
8 Correct 83 ms 31116 KB Output is correct
9 Correct 84 ms 31128 KB Output is correct
10 Correct 82 ms 31228 KB Output is correct
11 Correct 93 ms 31176 KB Output is correct
12 Correct 86 ms 31148 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 33 ms 22816 KB Output is correct
2 Correct 88 ms 32044 KB Output is correct
3 Correct 80 ms 31080 KB Output is correct
4 Correct 81 ms 31280 KB Output is correct
5 Correct 12 ms 22000 KB Output is correct
6 Correct 83 ms 31136 KB Output is correct
7 Correct 82 ms 31120 KB Output is correct
8 Correct 83 ms 31116 KB Output is correct
9 Correct 84 ms 31128 KB Output is correct
10 Correct 82 ms 31228 KB Output is correct
11 Correct 93 ms 31176 KB Output is correct
12 Correct 86 ms 31148 KB Output is correct
13 Correct 32 ms 22860 KB Output is correct
14 Correct 90 ms 31940 KB Output is correct
15 Correct 82 ms 31268 KB Output is correct
16 Correct 80 ms 31244 KB Output is correct
17 Correct 11 ms 21964 KB Output is correct
18 Correct 80 ms 31100 KB Output is correct
19 Correct 86 ms 31016 KB Output is correct
20 Correct 79 ms 31068 KB Output is correct
21 Correct 87 ms 31044 KB Output is correct
22 Correct 87 ms 31240 KB Output is correct
23 Correct 75 ms 31092 KB Output is correct
24 Correct 101 ms 31148 KB Output is correct
25 Correct 1838 ms 79084 KB Output is correct
26 Correct 1599 ms 83312 KB Output is correct
27 Correct 1578 ms 79252 KB Output is correct
28 Correct 1266 ms 83264 KB Output is correct
29 Correct 2793 ms 74516 KB Output is correct
30 Correct 2636 ms 115020 KB Output is correct
31 Correct 1879 ms 121420 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 33 ms 22816 KB Output is correct
2 Correct 88 ms 32044 KB Output is correct
3 Correct 80 ms 31080 KB Output is correct
4 Correct 81 ms 31280 KB Output is correct
5 Correct 12 ms 22000 KB Output is correct
6 Correct 83 ms 31136 KB Output is correct
7 Correct 82 ms 31120 KB Output is correct
8 Correct 83 ms 31116 KB Output is correct
9 Correct 84 ms 31128 KB Output is correct
10 Correct 82 ms 31228 KB Output is correct
11 Correct 93 ms 31176 KB Output is correct
12 Correct 86 ms 31148 KB Output is correct
13 Correct 32 ms 22860 KB Output is correct
14 Correct 90 ms 31940 KB Output is correct
15 Correct 82 ms 31268 KB Output is correct
16 Correct 80 ms 31244 KB Output is correct
17 Correct 11 ms 21964 KB Output is correct
18 Correct 80 ms 31100 KB Output is correct
19 Correct 86 ms 31016 KB Output is correct
20 Correct 79 ms 31068 KB Output is correct
21 Correct 87 ms 31044 KB Output is correct
22 Correct 87 ms 31240 KB Output is correct
23 Correct 75 ms 31092 KB Output is correct
24 Correct 101 ms 31148 KB Output is correct
25 Correct 1838 ms 79084 KB Output is correct
26 Correct 1599 ms 83312 KB Output is correct
27 Correct 1578 ms 79252 KB Output is correct
28 Correct 1266 ms 83264 KB Output is correct
29 Correct 2793 ms 74516 KB Output is correct
30 Correct 2636 ms 115020 KB Output is correct
31 Correct 1879 ms 121420 KB Output is correct
32 Correct 31 ms 23364 KB Output is correct
33 Correct 95 ms 33288 KB Output is correct
34 Correct 103 ms 32248 KB Output is correct
35 Correct 80 ms 32452 KB Output is correct
36 Correct 11 ms 21964 KB Output is correct
37 Correct 83 ms 32268 KB Output is correct
38 Correct 88 ms 32280 KB Output is correct
39 Correct 90 ms 32236 KB Output is correct
40 Correct 129 ms 32312 KB Output is correct
41 Correct 93 ms 32344 KB Output is correct
42 Correct 78 ms 32332 KB Output is correct
43 Correct 79 ms 32176 KB Output is correct
44 Correct 1872 ms 117572 KB Output is correct
45 Correct 1952 ms 121864 KB Output is correct
46 Correct 1803 ms 117580 KB Output is correct
47 Correct 1378 ms 121704 KB Output is correct
48 Correct 2544 ms 113420 KB Output is correct
49 Correct 2630 ms 114996 KB Output is correct
50 Correct 1854 ms 121272 KB Output is correct
51 Correct 2114 ms 126568 KB Output is correct
52 Correct 2304 ms 137432 KB Output is correct
53 Incorrect 2005 ms 127252 KB Output isn't correct
54 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 31 ms 22860 KB Output is correct
2 Correct 91 ms 31968 KB Output is correct
3 Correct 80 ms 31144 KB Output is correct
4 Correct 80 ms 31308 KB Output is correct
5 Correct 10 ms 21964 KB Output is correct
6 Correct 82 ms 31136 KB Output is correct
7 Correct 33 ms 22816 KB Output is correct
8 Correct 88 ms 32044 KB Output is correct
9 Correct 80 ms 31080 KB Output is correct
10 Correct 81 ms 31280 KB Output is correct
11 Correct 12 ms 22000 KB Output is correct
12 Correct 83 ms 31136 KB Output is correct
13 Correct 82 ms 31120 KB Output is correct
14 Correct 83 ms 31116 KB Output is correct
15 Correct 84 ms 31128 KB Output is correct
16 Correct 82 ms 31228 KB Output is correct
17 Correct 93 ms 31176 KB Output is correct
18 Correct 86 ms 31148 KB Output is correct
19 Correct 12 ms 21872 KB Output is correct
20 Correct 17 ms 21836 KB Output is correct
21 Correct 13 ms 21964 KB Output is correct
22 Correct 33 ms 23360 KB Output is correct
23 Correct 102 ms 32512 KB Output is correct
24 Correct 87 ms 31772 KB Output is correct
25 Correct 84 ms 31772 KB Output is correct
26 Correct 13 ms 21968 KB Output is correct
27 Correct 85 ms 32132 KB Output is correct
28 Correct 89 ms 32124 KB Output is correct
29 Correct 86 ms 32068 KB Output is correct
30 Correct 88 ms 31764 KB Output is correct
31 Correct 78 ms 32100 KB Output is correct
32 Correct 78 ms 31684 KB Output is correct
33 Correct 84 ms 31556 KB Output is correct
34 Correct 1650 ms 80504 KB Output is correct
35 Correct 1710 ms 77164 KB Output is correct
36 Correct 1691 ms 77124 KB Output is correct
37 Incorrect 1526 ms 82736 KB Output isn't correct
38 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 31 ms 22860 KB Output is correct
2 Correct 91 ms 31968 KB Output is correct
3 Correct 80 ms 31144 KB Output is correct
4 Correct 80 ms 31308 KB Output is correct
5 Correct 10 ms 21964 KB Output is correct
6 Correct 82 ms 31136 KB Output is correct
7 Correct 33 ms 22816 KB Output is correct
8 Correct 88 ms 32044 KB Output is correct
9 Correct 80 ms 31080 KB Output is correct
10 Correct 81 ms 31280 KB Output is correct
11 Correct 12 ms 22000 KB Output is correct
12 Correct 83 ms 31136 KB Output is correct
13 Correct 82 ms 31120 KB Output is correct
14 Correct 83 ms 31116 KB Output is correct
15 Correct 84 ms 31128 KB Output is correct
16 Correct 82 ms 31228 KB Output is correct
17 Correct 93 ms 31176 KB Output is correct
18 Correct 86 ms 31148 KB Output is correct
19 Correct 32 ms 22860 KB Output is correct
20 Correct 90 ms 31940 KB Output is correct
21 Correct 82 ms 31268 KB Output is correct
22 Correct 80 ms 31244 KB Output is correct
23 Correct 11 ms 21964 KB Output is correct
24 Correct 80 ms 31100 KB Output is correct
25 Correct 86 ms 31016 KB Output is correct
26 Correct 79 ms 31068 KB Output is correct
27 Correct 87 ms 31044 KB Output is correct
28 Correct 87 ms 31240 KB Output is correct
29 Correct 75 ms 31092 KB Output is correct
30 Correct 101 ms 31148 KB Output is correct
31 Correct 1838 ms 79084 KB Output is correct
32 Correct 1599 ms 83312 KB Output is correct
33 Correct 1578 ms 79252 KB Output is correct
34 Correct 1266 ms 83264 KB Output is correct
35 Correct 2793 ms 74516 KB Output is correct
36 Correct 2636 ms 115020 KB Output is correct
37 Correct 1879 ms 121420 KB Output is correct
38 Correct 12 ms 21872 KB Output is correct
39 Correct 17 ms 21836 KB Output is correct
40 Correct 13 ms 21964 KB Output is correct
41 Correct 33 ms 23360 KB Output is correct
42 Correct 102 ms 32512 KB Output is correct
43 Correct 87 ms 31772 KB Output is correct
44 Correct 84 ms 31772 KB Output is correct
45 Correct 13 ms 21968 KB Output is correct
46 Correct 85 ms 32132 KB Output is correct
47 Correct 89 ms 32124 KB Output is correct
48 Correct 86 ms 32068 KB Output is correct
49 Correct 88 ms 31764 KB Output is correct
50 Correct 78 ms 32100 KB Output is correct
51 Correct 78 ms 31684 KB Output is correct
52 Correct 84 ms 31556 KB Output is correct
53 Correct 1650 ms 80504 KB Output is correct
54 Correct 1710 ms 77164 KB Output is correct
55 Correct 1691 ms 77124 KB Output is correct
56 Incorrect 1526 ms 82736 KB Output isn't correct
57 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 31 ms 22860 KB Output is correct
2 Correct 91 ms 31968 KB Output is correct
3 Correct 80 ms 31144 KB Output is correct
4 Correct 80 ms 31308 KB Output is correct
5 Correct 10 ms 21964 KB Output is correct
6 Correct 82 ms 31136 KB Output is correct
7 Correct 33 ms 22816 KB Output is correct
8 Correct 88 ms 32044 KB Output is correct
9 Correct 80 ms 31080 KB Output is correct
10 Correct 81 ms 31280 KB Output is correct
11 Correct 12 ms 22000 KB Output is correct
12 Correct 83 ms 31136 KB Output is correct
13 Correct 82 ms 31120 KB Output is correct
14 Correct 83 ms 31116 KB Output is correct
15 Correct 84 ms 31128 KB Output is correct
16 Correct 82 ms 31228 KB Output is correct
17 Correct 93 ms 31176 KB Output is correct
18 Correct 86 ms 31148 KB Output is correct
19 Correct 32 ms 22860 KB Output is correct
20 Correct 90 ms 31940 KB Output is correct
21 Correct 82 ms 31268 KB Output is correct
22 Correct 80 ms 31244 KB Output is correct
23 Correct 11 ms 21964 KB Output is correct
24 Correct 80 ms 31100 KB Output is correct
25 Correct 86 ms 31016 KB Output is correct
26 Correct 79 ms 31068 KB Output is correct
27 Correct 87 ms 31044 KB Output is correct
28 Correct 87 ms 31240 KB Output is correct
29 Correct 75 ms 31092 KB Output is correct
30 Correct 101 ms 31148 KB Output is correct
31 Correct 1838 ms 79084 KB Output is correct
32 Correct 1599 ms 83312 KB Output is correct
33 Correct 1578 ms 79252 KB Output is correct
34 Correct 1266 ms 83264 KB Output is correct
35 Correct 2793 ms 74516 KB Output is correct
36 Correct 2636 ms 115020 KB Output is correct
37 Correct 1879 ms 121420 KB Output is correct
38 Correct 31 ms 23364 KB Output is correct
39 Correct 95 ms 33288 KB Output is correct
40 Correct 103 ms 32248 KB Output is correct
41 Correct 80 ms 32452 KB Output is correct
42 Correct 11 ms 21964 KB Output is correct
43 Correct 83 ms 32268 KB Output is correct
44 Correct 88 ms 32280 KB Output is correct
45 Correct 90 ms 32236 KB Output is correct
46 Correct 129 ms 32312 KB Output is correct
47 Correct 93 ms 32344 KB Output is correct
48 Correct 78 ms 32332 KB Output is correct
49 Correct 79 ms 32176 KB Output is correct
50 Correct 1872 ms 117572 KB Output is correct
51 Correct 1952 ms 121864 KB Output is correct
52 Correct 1803 ms 117580 KB Output is correct
53 Correct 1378 ms 121704 KB Output is correct
54 Correct 2544 ms 113420 KB Output is correct
55 Correct 2630 ms 114996 KB Output is correct
56 Correct 1854 ms 121272 KB Output is correct
57 Correct 2114 ms 126568 KB Output is correct
58 Correct 2304 ms 137432 KB Output is correct
59 Incorrect 2005 ms 127252 KB Output isn't correct
60 Halted 0 ms 0 KB -