CSES - NOI 2019 Open - Results
Submission details
Task:Graph Ordering
Sender:egor.lifar
Submission time:2019-03-10 01:06:04 +0200
Language:C++
Status:READY
Result:7
Feedback
groupverdictscore
#1ACCEPTED7
#20
#30
#40
#50
Test results
testverdicttimegroup
#1ACCEPTED0.12 s1, 4, 5details
#2ACCEPTED0.11 s1, 5details
#3ACCEPTED0.07 s1, 5details
#4ACCEPTED0.08 s1, 5details
#5ACCEPTED0.08 s1, 5details
#60.03 s2, 3, 5details
#7--2, 3, 5details
#80.03 s2, 3, 4, 5details
#9--2, 3, 4, 5details
#100.02 s2, 3, 4, 5details
#11--2, 3, 5details
#12--2, 3, 5details
#130.61 s2, 3, 4, 5details
#14--2, 3, 4, 5details
#150.03 s2, 3, 4, 5details
#160.03 s2, 3, 4, 5details
#170.04 s2, 3, 4, 5details
#180.04 s2, 3, 4, 5details
#19--3, 4, 5details
#20--3, 4, 5details
#210.03 s3, 4, 5details
#22--3, 4, 5details
#23--3, 5details
#24--3, 5details
#25--3, 5details
#260.03 s3, 5details
#27--3, 5details
#28--5details
#29--5details
#30--4, 5details
#31--4, 5details
#32--4, 5details
#33--4, 5details
#34--5details
#35--5details
#36--5details
#37ACCEPTED0.03 s1, 2, 3, 4, 5details
#380.05 s2, 3, 5details
#390.03 s2, 3, 5details
#400.03 s2, 3, 5details
#41ACCEPTED0.02 s1, 2, 3, 5details
#420.03 s2, 3, 5details
#43--3, 4, 5details
#44--3, 4, 5details
#450.22 s2, 3, 4, 5details
#460.03 s2, 3, 4, 5details
#470.03 s2, 3, 5details
#48--3, 4, 5details
#49--4, 5details

Code

 /*
ЗАПУСКАЕМ 
░ГУСЯ░▄▀▀▀▄░РАБОТЯГУ░░
▄███▀░◐░░░▌░░░░░░░
░░░░▌░░░░░▐░░░░░░░
░░░░▐░░░░░▐░░░░░░░
░░░░▐░░░░░▐░░░░░░░
░░░░▐░░░░░▐░░░░░░░
░░░░▐░░░░░▐░░░░░░░
░░░░▐░░░░░▐░░░░░░░
░░░░▐░░░░░▐░░░░░░░
░░░░▐░░░░░▐░░░░░░░
░░░░▐░░░░░▐░░░░░░░
░░░░▌░░░░░▐▄▄░░░░░
░░░░▌░░░░▄▀▒▒▀▀▀▀▄
░░░▐░░░░▐▒▒▒▒▒▒▒▒▀▀▄
░░░▐░░░░▐▄▒▒▒▒▒▒▒▒▒▒▀▄
░░░░▀▄░░░░▀▄▒▒▒▒▒▒▒▒▒▒▀▄
░░░░░░▀▄▄▄▄▄█▄▄▄▄▄▄▄▄▄▄▄▀▄
░░░░░░░░░░░▌▌░▌▌░░░░░
░░░░░░░░░░░▌▌░▌▌░░░░░
░░░░░░░░░▄▄▌▌▄▌▌░░░░░ 
 */
#include <iostream>
#include <complex>
#include <vector>
#include <string>
#include <algorithm>
#include <cstdio>
#include <numeric>
#include <cstring>
#include <ctime>
#include <cstdlib>
#include <set>
#include <map>
#include <unordered_map>
#include <unordered_set>
#include <list>
#include <cmath>
#include <bitset>
#include <cassert>
#include <queue>
#include <stack>
#include <deque>

using namespace std;
template<typename T1, typename T2> inline void chkmin(T1 &a, T2 b) {if (a > b) a = b;}
template<typename T1, typename T2> inline void chkmax(T1 &a, T2 b) {if (a < b) a = b;}
#define files(FILENAME) read(FILENAME); write(FILENAME)
#define read(FILENAME) freopen((FILENAME + ".in").c_str(), "r", stdin)
#define write(FILENAME) freopen((FILENAME + ".out").c_str(), "w", stdout)
#define all(c) (c).begin(), (c).end()
#define sz(c) (int)(c).size()
#define left left228
#define right right228
#define y1 y1228
#define mp make_pair
#define pb push_back
#define y2 y2228
const string FILENAME = "input";
const int MAXN = 100228;


int n, m;
vector<int> gg[MAXN];
bool used[MAXN];
vector<int> v[MAXN];
vector<int> order;


void dfss(int u) {
	used[u] = true;
	for (auto h: gg[u]) {
		if (!used[h]) {
			dfss(h);
		}
	}
	order.pb(u);
}



void dfs1(int u) {
	//cout << u + 1 << endl;
	used[u] = true;
	for (auto h: v[u]) {
		//cout << u << ' ' << h << endl;
		if (!used[h]) {
			dfs1(h);
		}
	}
	order.pb(u);
}

struct edge {
    int a, b, cap, flow;
};


int s, t, d[MAXN * 2], ptr[MAXN * 2], q[MAXN * 2];
vector<edge> e;
vector<int> g[MAXN * 2];

 
void add_edge(int a, int b, int cap) {
    edge e1 = {a, b, cap, 0};
    edge e2 = {b, a, 0, 0};
    g[a].push_back((int)e.size());
    e.push_back(e1);
    g[b].push_back((int)e.size());
    e.push_back(e2);
}


bool bfs() {
    int qh = 0, qt = 0;
    q[qt++] = s;
    memset(d, -1, sizeof(d));
    d[s] = 0;
    while (qh < qt && d[t] == -1) {
        int v = q[qh++];
        for (unsigned int i = 0; i < g[v].size(); i++) {
            int id = g[v][i], to = e[id].b;
            if (d[v] != -1 && d[to] == -1 && e[id].flow < e[id].cap) {
                q[qt++] = to;
                d[to] = d[v] + 1;
            }
        }
    }
    return d[t] != -1;
}
 
int dfs(int v, int flow) {
    if (!flow) { 
        return 0;
    }
    if (v == t) { 
        return flow;
    }
    for (; ptr[v] < (int)g[v].size(); ptr[v]++) {
        int id = g[v][ptr[v]], to = e[id].b;
        if (d[to] != d[v] + 1)  {
            continue;
        }
        int pushed = dfs(to, min(flow, e[id].cap - e[id].flow));
        if (pushed) {
            e[id].flow += pushed;
            e[id ^ 1].flow -= pushed;
            return pushed;
        }
    }
    return 0;
}
 

int dinic() {
    int flow = 0;
    for (;;) {
        if (!bfs()) {
            break;
        }
        memset(ptr, 0, sizeof(ptr));
        while (int pushed = dfs(s, 10000000)) {
            flow += pushed;
        }
    }
    return flow;
}

int  main() {
	ios_base::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	//read(FILENAME);
	cin >> n >> m;
	for (int i = 0; i < m; i++) {
		int a, b;
		cin >> a >> b;
		a--, b--;
		gg[a].pb(b);
		gg[b].pb(a);
	}
	if (m == n - 1) {
		vector<int> st;
		for (int i = 0; i < n; i++) {
			if (sz(gg[i]) == 1) {
				st.pb(i);
			}
		}
		if (sz(st) != 2) {
			cout << "IMPOSSIBLE\n";
			return 0;
		}
		dfss(st[0]);
		for (auto x: order) {
			cout << x + 1 << ' ';
		}
		cout << '\n';
		return 0;
	}
	for (int i = 0; i < n; i++) {
		for (int j = i + 1; j < n; j++) {
			e.clear();
			for (int i = 0; i <= 2 * n + 1; i++) {
				g[i].clear();
			}
			for (int t = 0; t < n; t++) {
				add_edge(2 * n, t * 2 + 1, 1);
				add_edge(t * 2, 2 * n + 1, 1);
				for (auto h: gg[t]) {
					add_edge(t * 2 + 1, h * 2, n);
				}
			}
			add_edge(2 * j + 1, 2 * i, n);
			s = 2 * n;
			t = 2 * n + 1;
			int kek = dinic();
			if (kek == n) {	
			//	cout << i << ' ' << j << endl;
				for (auto x: gg[i]) {
					v[i].pb(x);
				}
				for (auto x: gg[j]) {
					v[x].pb(j);
				}
				for (auto x: e) {
					if (x.flow >= 1) {
						
						if (x.a >= 0 && x.a < 2 * n && x.b >= 0 && x.b < 2 * n) {
							//cout << x.a / 2 << ' ' << x.b / 2 << ' ' << x.flow << endl;
							v[x.a / 2].pb(x.b / 2);
						}
					}
				}
				dfs1(i);
				reverse(all(order));
				for (auto x: order) {
					cout << x + 1 << ' ';
				}
				cout << '\n';
				exit(0);
			}
		}
	}
	cout << "IMPOSSIBLE\n";
 	return 0; 
}

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
100000 55408 4224 23528 55621 ...

Test 2

Group: 1, 5

Verdict: ACCEPTED

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

correct output
68068 86325 91398 75677 51068 ...

user output
75520 37121 89333 44052 51784 ...

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:

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

correct output
IMPOSSIBLE

user output
1 37 75 84 18 70 72 83 60 78 3...

Test 7

Group: 2, 3, 5

Verdict:

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

correct output
IMPOSSIBLE

user output
(empty)

Test 8

Group: 2, 3, 4, 5

Verdict:

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 83 3 32 10 99 79 70 52 7 81 ...

Test 9

Group: 2, 3, 4, 5

Verdict:

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
(empty)

Test 10

Group: 2, 3, 4, 5

Verdict:

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 30 8 88 54 6 52 86 63 97 ...

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
(empty)

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
(empty)

Test 13

Group: 2, 3, 4, 5

Verdict:

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
23 59 94 91 82 16 96 50 77 

Test 14

Group: 2, 3, 4, 5

Verdict:

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
(empty)

Test 15

Group: 2, 3, 4, 5

Verdict:

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 

Test 16

Group: 2, 3, 4, 5

Verdict:

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 44 30 49 27 59 7 

Test 17

Group: 2, 3, 4, 5

Verdict:

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 

Test 18

Group: 2, 3, 4, 5

Verdict:

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 2 

Test 19

Group: 3, 4, 5

Verdict:

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

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

user output
(empty)

Test 20

Group: 3, 4, 5

Verdict:

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

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

user output
(empty)

Test 21

Group: 3, 4, 5

Verdict:

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 676 346 860 940 788 505 761 ...

Test 22

Group: 3, 4, 5

Verdict:

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

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

user output
(empty)

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
(empty)

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
(empty)

Test 25

Group: 3, 5

Verdict:

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

correct output
IMPOSSIBLE

user output
(empty)

Test 26

Group: 3, 5

Verdict:

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

correct output
IMPOSSIBLE

user output
1 159 616 123 867 449 543 255 ...

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
(empty)

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
(empty)

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
(empty)

Test 30

Group: 4, 5

Verdict:

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

correct output
17857 81664 4369 61462 79754 8...

user output
(empty)

Test 31

Group: 4, 5

Verdict:

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

correct output
76869 5635 23236 12666 61633 8...

user output
(empty)

Test 32

Group: 4, 5

Verdict:

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

correct output
19788 11202 3496 24237 68564 5...

user output
(empty)

Test 33

Group: 4, 5

Verdict:

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

correct output
1 20339 9304 40427 67694 95656...

user output
(empty)

Test 34

Group: 5

Verdict:

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

correct output
IMPOSSIBLE

user output
(empty)

Test 35

Group: 5

Verdict:

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

correct output
IMPOSSIBLE

user output
(empty)

Test 36

Group: 5

Verdict:

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

correct output
IMPOSSIBLE

user output
(empty)

Test 37

Group: 1, 2, 3, 4, 5

Verdict: ACCEPTED

input
2 1
2 1

correct output
1 2

user output
2 1 

Test 38

Group: 2, 3, 5

Verdict:

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

correct output
IMPOSSIBLE

user output
1 6 7 4 5 2 3 

Test 39

Group: 2, 3, 5

Verdict:

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

correct output
IMPOSSIBLE

user output
1 7 9 8 4 6 5 3 2 

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
2 1 5 4 3 

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
1 12 16 9 3 14 2 5 17 10 6 13 ...

Test 43

Group: 3, 4, 5

Verdict:

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

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

user output
(empty)

Test 44

Group: 3, 4, 5

Verdict:

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

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

user output
(empty)

Test 45

Group: 2, 3, 4, 5

Verdict:

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
7 48 26 33 59 69 94 9 32 74 8 

Test 46

Group: 2, 3, 4, 5

Verdict:

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 38 81 29 36 37 61 26 55 8...

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
1 28 51 13 15 30 38 

Test 48

Group: 3, 4, 5

Verdict:

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

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

user output
(empty)

Test 49

Group: 4, 5

Verdict:

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

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

user output
(empty)