CSES - NOI 2019 - Results
Submission details
Task:Thieves and Prisons
Sender:Henrik Aalto
Submission time:2019-03-06 15:05:45 +0200
Language:C++
Status:READY
Result:0
Feedback
groupverdictscore
#10
#20
#30
#40
#50
Test results
testverdicttimegroup
#10.03 s2, 4, 5details
#20.01 s2, 4, 5details
#30.02 s2, 4, 5details
#40.03 s2, 4, 5details
#50.02 s2, 4, 5details
#60.02 s4, 5details
#7ACCEPTED0.02 s4, 5details
#80.02 s4, 5details
#90.02 s1, 3, 4, 5details
#100.02 s1, 3, 4, 5details
#110.03 s1, 3, 4, 5details
#12ACCEPTED0.02 s1, 3, 4, 5details
#130.02 s1, 3, 4, 5details
#140.02 s1, 3, 4, 5details
#150.01 s1, 3, 4, 5details
#16ACCEPTED0.02 s1, 3, 4, 5details
#170.03 s1, 2, 3, 4, 5details
#18ACCEPTED0.03 s1, 3, 4, 5details
#19--2, 5details
#20--2, 5details
#21--2, 5details
#22--5details
#23--5details
#240.02 s3, 4, 5details
#250.02 s3, 4, 5details
#260.01 s3, 4, 5details
#270.02 s3, 4, 5details
#280.02 s4, 5details
#290.03 s4, 5details
#300.01 s4, 5details
#310.02 s4, 5details
#320.02 s2, 4, 5details
#330.02 s2, 4, 5details
#340.03 s2, 4, 5details
#350.02 s2, 4, 5details
#36--3, 5details
#37--3, 5details
#38--3, 5details
#39--3, 5details
#40--5details
#41--5details
#42--5details
#43--5details
#44--2, 5details
#45--2, 5details
#46--2, 5details
#47--2, 5details

Compiler report

input/code.cpp: In function 'int main()':
input/code.cpp:25:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
       if(v[i].size() < s) {
                      ^
input/code.cpp:73:5: warning: label 'fail' defined but not used [-Wunused-label]
     fail:;
     ^~~~

Code

#include<bits/stdc++.h>
using namespace std;
const int N = 101010;
vector<int> v[N];
int p[N];
int t[N];
int n,m;
vector<int> paths[N];
void d(int x);
int bfs_with_path(int a,int b);
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cin >> n >> m;
  for(int i=1;i<=m;i++) {
    int a,b; cin >> a >> b;
    v[a].push_back(b);
    v[b].push_back(a);
  }
#define f first
#define s second
  if(n == m+1) {
    int s=1e9,b=-1;
    for(int i=1;i<=n;i++) {
      if(v[i].size() < s) {
        s = v[i].size();
        b = i;
      }
    }
    queue<pair<int,int>> q;
    vector<int> ans;
    int l = 0;
    q.push({b,++l});
    while(!q.empty()) {
      auto a=q.front(); q.pop();
      if(p[a.f]) continue;
      ans.push_back(a.f);
      l = max(l,a.s);
      p[a.f] = 1;
      for(auto u:v[a.f]) {
        if(!p[u]){
          q.push({u,a.s+1});
        }
      }
    }
    if(l == n) {
      for(auto u:ans)
        cout << u << " ";
      cout << "\n";
    }
    else cout << "IMPOSSIBLE\n";
  }
  else {
    // if not tree
    // brute the more trivial test cases
    for(int i=1;i<=n;i++) {
      d(i);  
    }
    vector<pair<int,int>> tests;
    for(int i=1;i<=n;i++) {
      if(paths[paths[i].back()].back() == i) {
        tests.push_back({i,paths[i].back()});
      }
    }
    for(auto u:tests) {
      if(bfs_with_path(u.f,u.s)) {
        for(auto u:paths[u.f])
          cout << u << " ";
        cout << "\n";
        return 0;
      }
    }
    fail:;
    cout << "IMPOSSIBLE\n";
  }
}
int bfs_with_path(int a,int b) {
  for(int i=1;i<=n;i++) p[i] = 0;
  vector<int> pos(n+1);
  for(int i=0;i<n;i++) {
    pos[paths[a][i]] = i+1;
  }
  queue<pair<int,int>> q;
  q.push({a,0});
  while(!q.empty()) {
    auto a=q.front(); q.pop();
    if(p[a.f]) continue;
    p[a.f] = 1;
    for(auto u:v[a.f]) {
      if(!p[u]){
        if( pos[u] < pos[a.f]) {
//          cout << pos[u] << " "<< pos[a.f] << " = " << u << " -> " << a.f << "\n";
          return 0;
        }
        q.push({u,a.f});
      }
    }
  }
  for(int i=1;i<=n;i++) p[i] = 0;
  q.push({b,0});
  while(!q.empty()) {
    auto a=q.front(); q.pop();
    if(p[a.f]) continue;
    p[a.f] = 1;
    for(auto u:v[a.f]) {
      if(!p[u]){
        if( pos[u] > pos[a.f]) {
          return 0;
        }
        q.push({u,a.f});
      }
    }
  }
  return 1;
}
void d(int x) {
  for(int i=1;i<=n;i++) p[i] = 0;
  queue<pair<int,int>> q;
  q.push({x,1});
  while(!q.empty()) {
    auto a=q.front(); q.pop();
    if(p[a.f]) continue;
    paths[x].push_back(a.f);
    p[a.f] = 1;
    for(auto u:v[a.f]) {
      if(!p[u]){
        q.push({u,a.s+1});
      }
    }
  }
}

Test details

Test 1

Group: 2, 4, 5

Verdict:

input
1 1 1
C 1

correct output

user output
(empty)

Test 2

Group: 2, 4, 5

Verdict:

input
1 1 1
O 1

correct output
IMPOSSIBLE

user output
(empty)

Test 3

Group: 2, 4, 5

Verdict:

input
1 1 2
C 1
C 1

correct output
IMPOSSIBLE

user output

Test 4

Group: 2, 4, 5

Verdict:

input
1 1 2
C 1
O 1

correct output
IMPOSSIBLE

user output

Test 5

Group: 2, 4, 5

Verdict:

input
1 1 2
O 1
C 1

correct output
IMPOSSIBLE

user output

Test 6

Group: 4, 5

Verdict:

input
2 1 2
C 1
C 2

correct output
1 1 

user output
IMPOSSIBLE

Test 7

Group: 4, 5

Verdict: ACCEPTED

input
2 1 2
C 1
O 1

correct output
IMPOSSIBLE

user output
IMPOSSIBLE

Test 8

Group: 4, 5

Verdict:

input
2 1 2
C 1
O 2

correct output
1 1 

user output
IMPOSSIBLE

Test 9

Group: 1, 3, 4, 5

Verdict:

input
3 2 5
C 1
C 2
O 3
C 1
...

correct output
1 1 1 1 1 

user output
IMPOSSIBLE

Test 10

Group: 1, 3, 4, 5

Verdict:

input
3 2 5
C 1
C 2
O 3
O 3
...

correct output
2 1 2 1 1 

user output
IMPOSSIBLE

Test 11

Group: 1, 3, 4, 5

Verdict:

input
3 2 5
C 1
C 2
O 3
O 1
...

correct output
2 1 2 1 1 

user output
IMPOSSIBLE

Test 12

Group: 1, 3, 4, 5

Verdict: ACCEPTED

input
3 2 5
C 1
C 2
O 1
O 3
...

correct output
IMPOSSIBLE

user output
IMPOSSIBLE

Test 13

Group: 1, 3, 4, 5

Verdict:

input
3 2 4
C 1
O 2
C 1
O 3

correct output
1 1 1 1 

user output
IMPOSSIBLE

Test 14

Group: 1, 3, 4, 5

Verdict:

input
3 2 4
C 1
O 2
C 2
O 1

correct output
1 1 1 1 

user output
IMPOSSIBLE

Test 15

Group: 1, 3, 4, 5

Verdict:

input
3 2 3
C 1
C 2
C 3

correct output
1 1 1 

user output
IMPOSSIBLE

Test 16

Group: 1, 3, 4, 5

Verdict: ACCEPTED

input
3 2 3
O 1
C 2
C 3

correct output
IMPOSSIBLE

user output
IMPOSSIBLE

Test 17

Group: 1, 2, 3, 4, 5

Verdict:

input
2 2 7
C 1
O 2
O 2
O 2
...

correct output
IMPOSSIBLE

user output

Test 18

Group: 1, 3, 4, 5

Verdict: ACCEPTED

input
4 2 5
C 2
O 3
C 1
O 4
...

correct output
1 1 1 1 1 

user output

Test 19

Group: 2, 5

Verdict:

input
100000 100000 100000
C 1
C 2
C 3
C 4
...

correct output
50000 49999 49998 49997 49996 ...

user output
(empty)

Test 20

Group: 2, 5

Verdict:

input
100000 100000 100000
C 1
C 2
C 3
C 4
...

correct output
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

user output
(empty)

Test 21

Group: 2, 5

Verdict:

input
100000 100000 100000
C 1
C 2
C 3
C 4
...

correct output
20000 20000 20000 20000 20000 ...

user output
(empty)

Test 22

Group: 5

Verdict:

input
100000 100 100000
C 1
C 2
C 3
C 4
...

correct output
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

user output
(empty)

Test 23

Group: 5

Verdict:

input
100000 99 100000
C 1
C 2
C 3
C 4
...

correct output
IMPOSSIBLE

user output
(empty)

Test 24

Group: 3, 4, 5

Verdict:

input
500 2 500
C 384
O 62
C 387
O 473
...

correct output
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

user output
(empty)

Test 25

Group: 3, 4, 5

Verdict:

input
500 2 500
C 384
O 62
C 387
O 473
...

correct output
1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 ...

user output
(empty)

Test 26

Group: 3, 4, 5

Verdict:

input
500 2 500
C 384
O 62
C 387
O 473
...

correct output
1 1 1 1 1 1 1 1 1 1 1 1 2 1 2 ...

user output
(empty)

Test 27

Group: 3, 4, 5

Verdict:

input
500 2 500
C 384
O 62
C 387
C 473
...

correct output
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

user output
(empty)

Test 28

Group: 4, 5

Verdict:

input
500 250 500
C 384
O 62
C 387
O 473
...

correct output
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

user output
(empty)

Test 29

Group: 4, 5

Verdict:

input
500 250 500
C 384
O 62
C 387
O 473
...

correct output
1 1 1 1 1 1 1 1 1 1 1 1 2 1 3 ...

user output
(empty)

Test 30

Group: 4, 5

Verdict:

input
500 250 500
C 384
O 62
C 387
O 473
...

correct output
1 1 1 1 1 3 2 3 3 2 2 2 5 4 2 ...

user output
(empty)

Test 31

Group: 4, 5

Verdict:

input
500 250 500
C 384
O 62
C 387
C 473
...

correct output
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

user output
(empty)

Test 32

Group: 2, 4, 5

Verdict:

input
500 500 500
C 384
O 62
C 387
O 473
...

correct output
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

user output
(empty)

Test 33

Group: 2, 4, 5

Verdict:

input
500 500 500
C 384
O 62
C 387
O 473
...

correct output
1 1 1 1 1 1 1 1 1 1 1 1 2 1 3 ...

user output
(empty)

Test 34

Group: 2, 4, 5

Verdict:

input
500 500 500
C 384
O 62
C 387
O 473
...

correct output
1 1 1 1 2 1 3 3 3 2 2 2 2 4 5 ...

user output
(empty)

Test 35

Group: 2, 4, 5

Verdict:

input
500 500 500
C 384
O 62
C 387
C 473
...

correct output
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

user output
(empty)

Test 36

Group: 3, 5

Verdict:

input
100000 2 100000
C 89384
O 54062
C 85387
O 53318
...

correct output
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

user output
(empty)

Test 37

Group: 3, 5

Verdict:

input
100000 2 100000
C 89384
O 54062
C 85387
O 53318
...

correct output
1 1 1 1 1 1 1 1 1 1 1 1 2 2 1 ...

user output
(empty)

Test 38

Group: 3, 5

Verdict:

input
100000 2 100000
C 89384
O 54062
C 85387
O 53318
...

correct output
1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 ...

user output
(empty)

Test 39

Group: 3, 5

Verdict:

input
100000 2 100000
C 89384
O 54062
C 85387
C 53318
...

correct output
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

user output
(empty)

Test 40

Group: 5

Verdict:

input
100000 50000 100000
C 89384
O 54062
C 85387
O 53318
...

correct output
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

user output
(empty)

Test 41

Group: 5

Verdict:

input
100000 50000 100000
C 89384
O 54062
C 85387
O 53318
...

correct output
1 1 1 1 1 1 1 1 1 1 1 1 3 2 1 ...

user output
(empty)

Test 42

Group: 5

Verdict:

input
100000 50000 100000
C 89384
O 54062
C 85387
O 53318
...

correct output
1 1 1 1 1 3 2 3 3 3 3 3 3 4 5 ...

user output
(empty)

Test 43

Group: 5

Verdict:

input
100000 50000 100000
C 89384
O 54062
C 85387
C 53318
...

correct output
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

user output
(empty)

Test 44

Group: 2, 5

Verdict:

input
100000 100000 100000
C 89384
O 54062
C 85387
O 53318
...

correct output
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

user output
(empty)

Test 45

Group: 2, 5

Verdict:

input
100000 100000 100000
C 89384
O 54062
C 85387
O 53318
...

correct output
1 1 1 1 1 1 1 1 1 1 1 1 3 2 1 ...

user output
(empty)

Test 46

Group: 2, 5

Verdict:

input
100000 100000 100000
C 89384
O 54062
C 85387
O 53318
...

correct output
1 1 1 1 2 1 3 3 3 3 3 3 4 5 3 ...

user output
(empty)

Test 47

Group: 2, 5

Verdict:

input
100000 100000 100000
C 89384
O 54062
C 85387
C 53318
...

correct output
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

user output
(empty)