CSES - NOI 2019 Open - Results
Submission details
Task:Graph Ordering
Sender:koosaga
Submission time:2019-10-10 12:45:14 +0300
Language:C++17
Status:READY
Result:21
Feedback
groupverdictscore
#10
#20
#30
#4ACCEPTED21
#50
Test results
testverdicttimegroup
#1ACCEPTED0.14 s1, 4, 5details
#20.13 s1, 5details
#3ACCEPTED0.07 s1, 5details
#4ACCEPTED0.11 s1, 5details
#5ACCEPTED0.12 s1, 5details
#6ACCEPTED0.02 s2, 3, 5details
#7ACCEPTED0.02 s2, 3, 5details
#8ACCEPTED0.02 s2, 3, 4, 5details
#9ACCEPTED0.02 s2, 3, 4, 5details
#10ACCEPTED0.02 s2, 3, 4, 5details
#110.02 s2, 3, 5details
#120.02 s2, 3, 5details
#13ACCEPTED0.02 s2, 3, 4, 5details
#14ACCEPTED0.02 s2, 3, 4, 5details
#15ACCEPTED0.02 s2, 3, 4, 5details
#16ACCEPTED0.02 s2, 3, 4, 5details
#17ACCEPTED0.02 s2, 3, 4, 5details
#18ACCEPTED0.02 s2, 3, 4, 5details
#19ACCEPTED0.03 s3, 4, 5details
#20ACCEPTED0.03 s3, 4, 5details
#21ACCEPTED0.03 s3, 4, 5details
#22ACCEPTED0.03 s3, 4, 5details
#230.03 s3, 5details
#240.02 s3, 5details
#25ACCEPTED0.02 s3, 5details
#26ACCEPTED0.03 s3, 5details
#270.02 s3, 5details
#280.23 s5details
#290.23 s5details
#30ACCEPTED0.26 s4, 5details
#31ACCEPTED0.23 s4, 5details
#32ACCEPTED0.24 s4, 5details
#33ACCEPTED0.26 s4, 5details
#34ACCEPTED0.25 s5details
#35ACCEPTED0.25 s5details
#36ACCEPTED0.25 s5details
#37ACCEPTED0.02 s1, 2, 3, 4, 5details
#38ACCEPTED0.02 s2, 3, 5details
#39ACCEPTED0.02 s2, 3, 5details
#400.02 s2, 3, 5details
#41ACCEPTED0.02 s1, 2, 3, 5details
#420.02 s2, 3, 5details
#43ACCEPTED0.03 s3, 4, 5details
#44ACCEPTED0.03 s3, 4, 5details
#45ACCEPTED0.02 s2, 3, 4, 5details
#46ACCEPTED0.02 s2, 3, 4, 5details
#470.02 s2, 3, 5details
#48ACCEPTED0.03 s3, 4, 5details
#49ACCEPTED0.03 s4, 5details

Compiler report

input/code.cpp: In function 'int main()':
input/code.cpp:119:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d %d",&n,&m);
  ~~~~~^~~~~~~~~~~~~~~
input/code.cpp:122:18: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   int s, t; scanf("%d %d",&s,&t);
             ~~~~~^~~~~~~~~~~~~~~

Code

#include <bits/stdc++.h>
using namespace std;
using pi = pair<int, int>;
const int MAXN = 400005;
#define sz(v) ((int)(v).size())

namespace STOrder{
	int n;
	vector<pi> gph[MAXN];
	vector<pi> backedg[MAXN];
	int par[MAXN], ord[MAXN], stk[MAXN], piv;

	void dfs(int x, int p){
		stk[x] = 1;
		ord[x] = ++piv;
		for(auto &i : gph[x]){
			if(i.first == p) continue;
			if(!ord[i.second]){
				par[i.second] = x;
				dfs(i.second, i.first);
			}
			else if(stk[i.second]){
				backedg[ord[i.second]].emplace_back(x, i.second);
			}
		}
		stk[x] = 0;
	}

	void clear(){
		for(int i=1; i<=n; i++){
			gph[i].clear();
			backedg[i].clear();
			ord[i] = 0;
		}
		piv = 0;
	}
	vector<int> solve(int _n, int s, int t, vector<pi> E){
		n = _n;
		gph[s].emplace_back(sz(E), t);
		gph[t].emplace_back(sz(E), s);
		for(int i=0; i<sz(E); i++){
			gph[E[i].first].emplace_back(i, E[i].second);
			gph[E[i].second].emplace_back(i, E[i].first);
		}
		dfs(s, -1);
		if(piv != n) return {};
		vector<vector<int>> ears;
		vector<int> mark(n + 1);
		for(int i=1; i<=n; i++){
			for(auto &j : backedg[i]){
				vector<int> v = {j.second, j.first};
				for(int k=j.first; k!=j.second; k=par[k]){
					if(mark[k]) break;
					mark[k] = 1;
					v.push_back(par[k]);
				}
				ears.push_back(v);
			}
		}
		if(sz(ears) == 0 || ears[0].front() != ears[0].back()) return {};
		for(int i=1; i<sz(ears); i++){
			if(ears[i].front() == ears[i].back()) return {};
		}
		for(int i=1; i<=n; i++){
			if(i != s && !mark[i]) return {};
		}
		vector<int> dp(n + 1);
		vector<pi> intv(n + 1);
		for(int i=sz(ears)-1; i>=1; i--){
			for(int j=1; j+1<sz(ears[i]); j++){
				dp[ears[i][0]] += 1 + dp[ears[i][j]];
			}
		}
		for(int j=0; j+1<sz(ears[0]); j++){
			intv[ears[0][j]].second = intv[ears[0][j]].first + dp[ears[0][j]] + 1;
			if(j + 2 < sz(ears[0])) intv[ears[0][j+1]].first = intv[ears[0][j]].second;
		}
		for(int i=1; i<sz(ears); i++){
			if(intv[ears[i][0]] < intv[ears[i].back()]){
				pi curIntv = intv[ears[i][0]];
				for(int j=sz(ears[i])-2; j>=1; j--){
					intv[ears[i][j]] = pi(curIntv.second - dp[ears[i][j]] - 1, curIntv.second);
					curIntv.second -= dp[ears[i][j]] + 1;
				}
				intv[ears[i][0]] = curIntv;
			}
			else{
				pi curIntv = intv[ears[i][0]];
				for(int j=sz(ears[i])-2; j>=1; j--){
					intv[ears[i][j]] = pi(curIntv.first, curIntv.first + dp[ears[i][j]] + 1);
					curIntv.first += dp[ears[i][j]] + 1;
				}
				intv[ears[i][0]] = curIntv;
			}
		}
		vector<int> dap(n);
		for(int i=1; i<=n; i++){
			assert(intv[i].first + 1 == intv[i].second);
			dap[intv[i].first] = i;
		}
		return dap;
	}
}

vector<int> gph[MAXN];
bool vis[MAXN];

void dfs(int x, int p, int *save){
	*save = x;
	vis[x] = 1;
	for(auto &i : gph[x]){
		if(i != p && !vis[i]){
			dfs(i, x, save);
		}
	}
}
int main(){
	int n, m, s, t;
	scanf("%d %d",&n,&m);
	vector<pi> e(m);
	for(int i=0; i<m; i++){
		int s, t; scanf("%d %d",&s,&t);
		gph[s].push_back(t);
		gph[t].push_back(s);
		e[i] = pi(s, t);
	}
	dfs(1, -1, &s);
	memset(vis, 0, sizeof(vis));
	dfs(s, -1, &t);
	s = 1, t = n;
	auto P = STOrder::solve(n, s, t, e);
	if(sz(P)) for(auto &i : P) printf("%d ", i);
	else puts("IMPOSSIBLE");
}

Test details

Test 1

Group: 1, 4, 5

Verdict: ACCEPTED

input
100000 99999
8326 74462
11810 58064
21677 73087
62986 25005
...

correct output
1 44159 25721 84659 90058 9960...

user output
1 44159 25721 84659 90058 9960...

Test 2

Group: 1, 5

Verdict:

input
100000 99999
28990 31200
86271 56882
61089 18658
52422 57504
...

correct output
68068 86325 91398 75677 51068 ...

user output
IMPOSSIBLE

Test 3

Group: 1, 5

Verdict: ACCEPTED

input
100000 99999
29378 80094
12282 29378
96138 29378
61870 29378
...

correct output
IMPOSSIBLE

user output
IMPOSSIBLE

Test 4

Group: 1, 5

Verdict: ACCEPTED

input
100000 99999
97935 71091
9181 31715
73649 47675
45394 25464
...

correct output
IMPOSSIBLE

user output
IMPOSSIBLE

Test 5

Group: 1, 5

Verdict: ACCEPTED

input
100000 99999
2897 55594
11759 89041
56061 8717
69672 73046
...

correct output
IMPOSSIBLE

user output
IMPOSSIBLE

Test 6

Group: 2, 3, 5

Verdict: ACCEPTED

input
100 200
55 10
33 57
68 39
29 27
...

correct output
IMPOSSIBLE

user output
IMPOSSIBLE

Test 7

Group: 2, 3, 5

Verdict: ACCEPTED

input
100 175
71 86
100 88
83 92
25 73
...

correct output
IMPOSSIBLE

user output
IMPOSSIBLE

Test 8

Group: 2, 3, 4, 5

Verdict: ACCEPTED

input
100 200
26 58
49 25
66 20
20 85
...

correct output
1 2 86 60 34 92 23 4 44 89 76 ...

user output
1 2 86 68 45 78 43 65 39 5 57 ...

Test 9

Group: 2, 3, 4, 5

Verdict: ACCEPTED

input
100 195
19 28
63 48
1 57
1 20
...

correct output
12 97 18 74 36 10 78 50 61 95 ...

user output
1 13 25 17 79 23 11 30 68 56 3...

Test 10

Group: 2, 3, 4, 5

Verdict: ACCEPTED

input
100 193
48 66
15 67
32 14
36 78
...

correct output
1 56 13 32 14 49 75 93 18 6 54...

user output
1 56 13 32 40 45 3 89 70 90 68...

Test 11

Group: 2, 3, 5

Verdict:

input
100 195
47 68
57 61
45 17
80 61
...

correct output
57 20 83 41 25 33 60 91 59 7 7...

user output
IMPOSSIBLE

Test 12

Group: 2, 3, 5

Verdict:

input
100 185
43 78
76 99
78 39
83 61
...

correct output
78 43 32 88 26 28 64 81 7 72 2...

user output
IMPOSSIBLE

Test 13

Group: 2, 3, 4, 5

Verdict: ACCEPTED

input
99 132
96 16
18 89
98 50
66 26
...

correct output
1 12 45 71 97 22 35 9 60 27 20...

user output
1 12 45 71 97 22 35 9 60 27 20...

Test 14

Group: 2, 3, 4, 5

Verdict: ACCEPTED

input
98 144
25 6
30 34
58 25
31 41
...

correct output
32 7 92 1 63 86 87 14 90 17 81...

user output
1 7 92 32 63 86 87 14 90 17 81...

Test 15

Group: 2, 3, 4, 5

Verdict: ACCEPTED

input
96 145
19 70
72 92
27 72
17 85
...

correct output
1 50 30 4 10 48 42 5 70 19 29 ...

user output
1 50 30 4 10 48 42 70 5 19 29 ...

Test 16

Group: 2, 3, 4, 5

Verdict: ACCEPTED

input
96 158
79 74
41 70
8 5
73 90
...

correct output
7 59 44 27 1 30 49 28 80 52 15...

user output
1 27 44 59 7 30 49 28 52 80 15...

Test 17

Group: 2, 3, 4, 5

Verdict: ACCEPTED

input
96 142
95 35
67 89
91 70
48 21
...

correct output
13 20 81 33 1 51 19 69 16 85 6...

user output
1 20 81 33 13 51 19 85 6 69 16...

Test 18

Group: 2, 3, 4, 5

Verdict: ACCEPTED

input
72 111
70 17
25 3
58 24
52 9
...

correct output
21 59 48 8 1 2 31 10 11 41 4 5...

user output
1 8 48 59 21 2 31 10 11 41 4 5...

Test 19

Group: 3, 4, 5

Verdict: ACCEPTED

input
988 1563
402 701
830 801
50 578
8 144
...

correct output
1 136 368 683 447 304 131 53 8...

user output
1 136 368 683 447 304 131 53 8...

Test 20

Group: 3, 4, 5

Verdict: ACCEPTED

input
994 1555
171 541
66 915
330 350
494 251
...

correct output
1 164 205 151 951 797 4 654 14...

user output
1 951 205 164 151 797 4 654 91...

Test 21

Group: 3, 4, 5

Verdict: ACCEPTED

input
1000 2000
711 947
775 441
691 471
844 28
...

correct output
1 676 731 662 248 31 165 558 8...

user output
1 788 505 572 816 75 751 412 4...

Test 22

Group: 3, 4, 5

Verdict: ACCEPTED

input
1000 2000
811 889
873 984
83 52
144 511
...

correct output
60 909 522 568 40 77 181 441 8...

user output
1 244 46 651 60 909 522 898 90...

Test 23

Group: 3, 5

Verdict:

input
1000 1869
625 715
448 714
110 927
432 1000
...

correct output
224 326 221 30 76 475 666 694 ...

user output
IMPOSSIBLE

Test 24

Group: 3, 5

Verdict:

input
1000 1783
709 1
182 768
355 40
786 260
...

correct output
230 6 135 678 346 19 470 960 3...

user output
IMPOSSIBLE

Test 25

Group: 3, 5

Verdict: ACCEPTED

input
1000 2000
92 876
273 598
287 535
526 972
...

correct output
IMPOSSIBLE

user output
IMPOSSIBLE

Test 26

Group: 3, 5

Verdict: ACCEPTED

input
1000 1910
789 821
553 740
889 527
488 730
...

correct output
IMPOSSIBLE

user output
IMPOSSIBLE

Test 27

Group: 3, 5

Verdict:

input
1000 1608
910 416
503 898
928 14
412 903
...

correct output
140 404 739 563 63 794 623 948...

user output
IMPOSSIBLE

Test 28

Group: 5

Verdict:

input
100000 198666
5659 89691
91040 53375
96642 56177
28768 57001
...

correct output
45598 74078 1039 83702 16344 8...

user output
IMPOSSIBLE

Test 29

Group: 5

Verdict:

input
100000 197194
41636 91770
63018 23827
39207 93713
67765 47715
...

correct output
79054 61855 53279 55546 60860 ...

user output
IMPOSSIBLE

Test 30

Group: 4, 5

Verdict: ACCEPTED

input
100000 199985
13674 42886
51349 6858
78502 18751
13628 65936
...

correct output
17857 81664 4369 61462 79754 8...

user output
1 47064 44643 17857 81664 2632...

Test 31

Group: 4, 5

Verdict: ACCEPTED

input
100000 200000
27666 33166
7161 81452
73134 30281
5106 29308
...

correct output
76869 5635 23236 12666 61633 8...

user output
1 73905 50785 36533 69043 8425...

Test 32

Group: 4, 5

Verdict: ACCEPTED

input
100000 200000
62814 54729
98407 26888
91808 70132
58916 49730
...

correct output
19788 11202 3496 24237 68564 5...

user output
1 75042 87874 52310 37125 6317...

Test 33

Group: 4, 5

Verdict: ACCEPTED

input
100000 200000
2299 91653
21125 75544
54029 94067
86513 45051
...

correct output
1 20339 9304 40427 67694 95656...

user output
1 20339 9304 67694 95656 40427...

Test 34

Group: 5

Verdict: ACCEPTED

input
100000 200000
34688 93668
78127 18902
55150 33116
273 88797
...

correct output
IMPOSSIBLE

user output
IMPOSSIBLE

Test 35

Group: 5

Verdict: ACCEPTED

input
100000 200000
21026 14630
5605 59639
25604 78683
55713 70513
...

correct output
IMPOSSIBLE

user output
IMPOSSIBLE

Test 36

Group: 5

Verdict: ACCEPTED

input
100000 200000
63190 73606
52072 54105
22092 31495
9189 37924
...

correct output
IMPOSSIBLE

user output
IMPOSSIBLE

Test 37

Group: 1, 2, 3, 4, 5

Verdict: ACCEPTED

input
2 1
2 1

correct output
1 2

user output
1 2 

Test 38

Group: 2, 3, 5

Verdict: ACCEPTED

input
7 9
1 2
1 3
2 3
1 4
...

correct output
IMPOSSIBLE

user output
IMPOSSIBLE

Test 39

Group: 2, 3, 5

Verdict: ACCEPTED

input
9 12
1 2
2 3
3 1
4 5
...

correct output
IMPOSSIBLE

user output
IMPOSSIBLE

Test 40

Group: 2, 3, 5

Verdict:

input
5 5
4 2
4 3
2 1
3 1
...

correct output
4 2 3 1 5

user output
IMPOSSIBLE

Test 41

Group: 1, 2, 3, 5

Verdict: ACCEPTED

input
4 3
1 2
3 2
4 2

correct output
IMPOSSIBLE

user output
IMPOSSIBLE

Test 42

Group: 2, 3, 5

Verdict:

input
17 30
4 1
3 14
6 16
13 6
...

correct output
7 8 11 15 1 2 9 3 14 13 5 10 1...

user output
IMPOSSIBLE

Test 43

Group: 3, 4, 5

Verdict: ACCEPTED

input
992 1712
377 709
847 640
261 902
761 693
...

correct output
870 1 925 928 950 257 766 520 ...

user output
1 870 925 928 90 366 629 148 2...

Test 44

Group: 3, 4, 5

Verdict: ACCEPTED

input
990 1672
305 445
800 155
365 779
824 247
...

correct output
108 461 160 696 895 655 376 21...

user output
1 326 88 213 376 655 895 696 1...

Test 45

Group: 2, 3, 4, 5

Verdict: ACCEPTED

input
99 169
35 32
97 43
22 62
33 7
...

correct output
19 70 62 22 54 78 25 14 3 81 1...

user output
1 19 70 62 22 75 52 96 30 17 3...

Test 46

Group: 2, 3, 4, 5

Verdict: ACCEPTED

input
99 164
62 73
19 35
55 92
79 91
...

correct output
21 25 64 90 17 15 89 95 70 33 ...

user output
1 75 96 42 16 33 70 89 15 17 9...

Test 47

Group: 2, 3, 5

Verdict:

input
53 68
7 46
51 14
3 18
8 40
...

correct output
32 30 38 33 27 12 8 20 2 34 45...

user output
IMPOSSIBLE

Test 48

Group: 3, 4, 5

Verdict: ACCEPTED

input
996 1902
661 201
19 613
895 438
180 32
...

correct output
220 795 198 239 40 164 773 834...

user output
1 384 232 56 647 929 795 239 4...

Test 49

Group: 4, 5

Verdict: ACCEPTED

input
6110 11528
3366 4718
3226 2188
5022 1186
3205 5349
...

correct output
1 2527 2211 554 4201 4522 1494...

user output
1 2527 5118 2168 1958 5589 368...