Submission #107752

# Submission time Handle Problem Language Result Execution time Memory
107752 2019-04-25T15:53:58 Z patrikpavic2 Senior Postmen (BOI14_postmen) C++17
100 / 100
320 ms 44800 KB
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <vector>

#define X first
#define Y second
#define PB push_back

using namespace std;

typedef pair < int, int > pii;
typedef vector < int > vi;

const int N = 5e5 + 5;

int bio[N], n, m, nod[N],ind[N], rek[N], cur;
vector < pii > v[N];
int tura[N], st[N], tr, ss, v1[N], v2[N];


inline bool is( const char &c ) { return c >= '0' && c <= '9'; }

inline int read_int( ) {
    int num;
    char c;
    while( !is( c = getchar_unlocked( ) ) );
    num = c - '0';
    while( is( c = getchar_unlocked( ) ) ) num = num * 10 + c - '0';
    return num;
}

inline void euler(){
    rek[cur++] = 1;
    for(;cur;){
        int x = rek[cur - 1];
        for(;ind[x] < v[x].size() && bio[v[x][ind[x]].Y];++ind[x]);
        if(ind[x] == v[x].size()) --cur, tura[tr++] = x;
        for(;ind[x] < v[x].size();++ind[x]){
            if(bio[v[x][ind[x]].Y]) continue;
            bio[v[x][ind[x]].Y] = 1;
            int nxt = v[x][ind[x]].X;
            rek[cur++] = nxt;
            break;
        }

    }
}

inline void rastavi(){
    memset(bio, 0, sizeof(bio));
    for(int i = 0;i < tr;++i){
        if(bio[tura[i]]){
            while(st[ss - 1] != tura[i]){
                printf("%d ", st[ss - 1]);
                bio[st[ss - 1]]--;
                --ss;
            }
            --ss;
            --bio[tura[i]];
            printf("%d\n", tura[i]);
        }
        st[ss++] = tura[i];
        ++bio[tura[i]];
    }
}

int main(){
    n = read_int(); m = read_int();
    for(int i = 0;i < m;++i){
        v1[i] = read_int();
        v2[i] = read_int();
        ind[v1[i]]++, ind[v2[i]]++;
    }
    for(int i = 1;i <= n;i++){
        v[i].resize(ind[i]);
        ind[i] = 0;
    }
    for(int i = 0;i < m;i++){
        v[v1[i]][ind[v1[i]]++].X = v2[i];
        v[v1[i]][ind[v1[i]] - 1].Y = i;
        v[v2[i]][ind[v2[i]]++].X = v1[i];
        v[v2[i]][ind[v2[i]] - 1].Y = i;
    }
    memset(ind, 0, sizeof(ind));
    euler();
    rastavi();
    return 0;
}

Compilation message

postmen.cpp: In function 'void euler()':
postmen.cpp:37:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for(;ind[x] < v[x].size() && bio[v[x][ind[x]].Y];++ind[x]);
              ~~~~~~~^~~~~~~~~~~~~
postmen.cpp:38:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         if(ind[x] == v[x].size()) --cur, tura[tr++] = x;
            ~~~~~~~^~~~~~~~~~~~~~
postmen.cpp:39:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for(;ind[x] < v[x].size();++ind[x]){
              ~~~~~~~^~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 15 ms 16000 KB Output is correct
2 Correct 18 ms 16000 KB Output is correct
3 Correct 17 ms 16000 KB Output is correct
4 Correct 19 ms 16128 KB Output is correct
5 Correct 14 ms 16000 KB Output is correct
6 Correct 18 ms 16104 KB Output is correct
7 Correct 17 ms 16512 KB Output is correct
8 Correct 14 ms 16128 KB Output is correct
9 Correct 35 ms 19584 KB Output is correct
10 Correct 15 ms 16128 KB Output is correct
11 Correct 15 ms 16128 KB Output is correct
12 Correct 40 ms 19576 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 14 ms 15956 KB Output is correct
2 Correct 13 ms 16000 KB Output is correct
3 Correct 16 ms 15976 KB Output is correct
4 Correct 16 ms 16128 KB Output is correct
5 Correct 15 ms 16000 KB Output is correct
6 Correct 14 ms 16104 KB Output is correct
7 Correct 17 ms 16512 KB Output is correct
8 Correct 14 ms 16104 KB Output is correct
9 Correct 38 ms 19552 KB Output is correct
10 Correct 20 ms 16128 KB Output is correct
11 Correct 15 ms 16180 KB Output is correct
12 Correct 36 ms 19712 KB Output is correct
13 Correct 46 ms 21624 KB Output is correct
14 Correct 46 ms 20904 KB Output is correct
15 Correct 52 ms 20600 KB Output is correct
16 Correct 47 ms 21752 KB Output is correct
17 Correct 58 ms 20472 KB Output is correct
18 Correct 46 ms 20856 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 14 ms 16000 KB Output is correct
2 Correct 14 ms 16000 KB Output is correct
3 Correct 15 ms 16000 KB Output is correct
4 Correct 15 ms 16104 KB Output is correct
5 Correct 15 ms 16000 KB Output is correct
6 Correct 16 ms 16128 KB Output is correct
7 Correct 17 ms 16512 KB Output is correct
8 Correct 24 ms 16128 KB Output is correct
9 Correct 43 ms 19448 KB Output is correct
10 Correct 16 ms 16128 KB Output is correct
11 Correct 15 ms 16128 KB Output is correct
12 Correct 36 ms 19576 KB Output is correct
13 Correct 48 ms 21752 KB Output is correct
14 Correct 51 ms 20856 KB Output is correct
15 Correct 46 ms 20648 KB Output is correct
16 Correct 47 ms 21624 KB Output is correct
17 Correct 64 ms 20344 KB Output is correct
18 Correct 44 ms 20984 KB Output is correct
19 Correct 247 ms 44800 KB Output is correct
20 Correct 238 ms 40928 KB Output is correct
21 Correct 289 ms 39400 KB Output is correct
22 Correct 278 ms 44788 KB Output is correct
23 Correct 131 ms 33632 KB Output is correct
24 Correct 320 ms 38264 KB Output is correct
25 Correct 228 ms 40816 KB Output is correct