CSES - HIIT Open 2024 - Results
Submission details
Task:Light rail connections
Sender:¯\_(._.)_/¯
Submission time:2024-11-16 13:59:28 +0200
Language:C++ (C++17)
Status:READY
Result:ACCEPTED
Test results
testverdicttime
#1ACCEPTED0.00 sdetails
#2ACCEPTED0.01 sdetails
#3ACCEPTED0.01 sdetails
#4ACCEPTED0.00 sdetails
#5ACCEPTED0.00 sdetails
#6ACCEPTED0.00 sdetails
#7ACCEPTED0.01 sdetails
#8ACCEPTED0.00 sdetails
#9ACCEPTED0.00 sdetails
#10ACCEPTED0.00 sdetails
#11ACCEPTED0.01 sdetails
#12ACCEPTED0.01 sdetails
#13ACCEPTED0.01 sdetails
#14ACCEPTED0.01 sdetails
#15ACCEPTED0.00 sdetails
#16ACCEPTED0.00 sdetails
#17ACCEPTED0.00 sdetails
#18ACCEPTED0.00 sdetails
#19ACCEPTED0.00 sdetails
#20ACCEPTED0.01 sdetails
#21ACCEPTED0.00 sdetails
#22ACCEPTED0.00 sdetails
#23ACCEPTED0.01 sdetails
#24ACCEPTED0.00 sdetails
#25ACCEPTED0.00 sdetails
#26ACCEPTED0.00 sdetails
#27ACCEPTED0.00 sdetails
#28ACCEPTED0.01 sdetails
#29ACCEPTED0.00 sdetails
#30ACCEPTED0.00 sdetails
#31ACCEPTED0.00 sdetails
#32ACCEPTED0.00 sdetails
#33ACCEPTED0.00 sdetails
#34ACCEPTED0.00 sdetails
#35ACCEPTED0.00 sdetails
#36ACCEPTED0.00 sdetails
#37ACCEPTED0.00 sdetails
#38ACCEPTED0.01 sdetails

Compiler report

input/code.cpp: In function 'void dfs(long long int, long long int, std::vector<std::vector<long long int> >&, std::vector<long long int>&, std::vector<std::pair<long long int, long long int> >&, long long int)':
input/code.cpp:21:23: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   21 |     for (int i = 0; i < adj[start].size(); i++) {
      |                     ~~^~~~~~~~~~~~~~~~~~~
input/code.cpp: In function 'void solve()':
input/code.cpp:54:23: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   54 |     for (int v = 1; v < visited.size(); v++)
      |                     ~~^~~~~~~~~~~~~~~~
input/code.cpp:61:23: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type'...

Code

#include <bits/stdc++.h>
#include <iostream>

#define int long long
using namespace std;

void dfs(int start, int prev, vector<vector<int>> &adj, vector<int> &visited, vector<pair<int, int>> &edges, int prev_ind)
{
    if(visited[start] == 1) {
        return;
    }
    visited[start] = 1;

    // remove edge from structure
    if (prev_ind != -1) {
        adj[prev][prev_ind] = -1;
        edges.push_back({prev, start});
    }
    // add edge to saved edges

    for (int i = 0; i < adj[start].size(); i++) {
        if (adj[start][i] == prev) {
            // remove duplicate edges
            adj[start][i] = -1;
            continue;
        }
        if (adj[start][i] != -1)
            dfs(adj[start][i], start, adj, visited, edges, i);
    }
}

void solve()
{
    int n, m;
    cin >> n >> m;

    vector<int> visited(n + 1, 0);
    vector<vector<int>> adj(n + 1, vector<int>());
    int a, b;
    for (int i = 0; i < m; i++) {
        cin >> a >> b;
        adj[a].push_back(b);
        adj[b].push_back(a);
    }

    /*for (auto u : adj) {
        for (auto el : u) {
            cout << el << " ";
        }
        cout << "\n";
    }*/
    vector<pair<int, int>> edges;
    // dfs(1, 1, adj, visited, edges, 0);
    for (int v = 1; v < visited.size(); v++) 
    {
        if (visited[v] == 0) {
            dfs(v, v, adj, visited, edges, -1);
        }
    }
    visited = vector<int>(n + 1, 0);
    for (int v = 1; v < visited.size(); v++) 
    {
        if (visited[v] == 0) {
            dfs(v, v, adj, visited, edges, -1);
        }
    }
    visited = vector<int>(n + 1, 0);
    for (int v = 1; v < visited.size(); v++) 
    {
        if (visited[v] == 0) {
            dfs(v, v, adj, visited, edges, -1);
        }
    }
    cout << edges.size() << "\n";
    for (auto u : edges) {
        cout << u.first << " " << u.second << "\n";
    }
}

signed main()
{
    int t = 1;
    // cin >> t;
    for (int i = 0; i < t; i++)
        solve();
}

Test details

Test 1

Verdict: ACCEPTED

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

correct output
8
1 2
1 3
1 4
2 3
...

user output
8
1 2
2 3
3 4
3 5
...

Test 2

Verdict: ACCEPTED

input
100 2451
1 2
1 3
1 4
1 5
...

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

user output
295
1 2
2 3
3 4
4 5
...

Test 3

Verdict: ACCEPTED

input
100 1206
1 2
26 27
51 52
76 77
...

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

user output
294
1 2
2 3
3 4
4 5
...

Test 4

Verdict: ACCEPTED

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

correct output
8
1 3
1 5
2 1
2 3
...

user output
8
1 3
3 2
3 5
5 4
...

Test 5

Verdict: ACCEPTED

input
10 10
1 2
2 5
7 10
5 4
...

correct output
10
1 2
1 6
2 5
2 10
...

user output
10
1 2
2 5
5 4
4 7
...

Test 6

Verdict: ACCEPTED

input
10 45
1 6
1 7
10 6
4 6
...

correct output
27
1 3
1 6
1 7
1 9
...

user output
27
1 6
6 10
10 2
2 5
...

Test 7

Verdict: ACCEPTED

input
100 45
42 4
39 75
99 87
9 65
...

correct output
45
1 13
4 96
7 26
9 65
...

user output
45
1 13
3 39
39 75
4 42
...

Test 8

Verdict: ACCEPTED

input
100 400
19 66
48 11
34 85
22 9
...

correct output
296
1 27
1 38
1 63
2 44
...

user output
293
1 38
38 15
15 4
4 58
...

Test 9

Verdict: ACCEPTED

input
100 500
17 75
80 65
89 16
65 73
...

correct output
297
1 55
1 62
1 75
1 78
...

user output
296
1 75
75 17
17 37
37 85
...

Test 10

Verdict: ACCEPTED

input
1000 500
989 549
7 137
716 180
20 265
...

correct output
500
1 931
7 137
11 781
14 305
...

user output
500
1 931
931 96
96 973
931 434
...

Test 11

Verdict: ACCEPTED

input
1000 5000
911 615
730 255
283 617
821 101
...

correct output
2992
1 359
1 579
1 688
1 826
...

user output
2987
1 579
579 878
878 766
766 658
...

Test 12

Verdict: ACCEPTED

input
1000 10000
116 615
301 287
869 274
717 549
...

correct output
2997
1 165
1 496
1 661
2 22
...

user output
2997
1 661
661 380
380 895
895 309
...

Test 13

Verdict: ACCEPTED

input
1000 1000
395 816
73 640
124 192
920 419
...

correct output
1000
2 903
3 634
4 959
5 274
...

user output
1000
1 875
875 12
12 420
12 349
...

Test 14

Verdict: ACCEPTED

input
100 4000
18 66
63 12
50 12
48 78
...

correct output
297
1 8
1 34
1 40
1 43
...

user output
297
1 34
34 35
35 71
71 46
...

Test 15

Verdict: ACCEPTED

input
1 0

correct output
0

user output
0

Test 16

Verdict: ACCEPTED

input
10 0

correct output
0

user output
0

Test 17

Verdict: ACCEPTED

input
100 0

correct output
0

user output
0

Test 18

Verdict: ACCEPTED

input
1000 0

correct output
0

user output
0

Test 19

Verdict: ACCEPTED

input
5 6
5 1
4 1
5 2
4 2
...

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

user output
6
1 5
5 2
2 4
4 3
...

Test 20

Verdict: ACCEPTED

input
9 12
6 8
7 8
6 5
7 5
...

correct output
12
6 2
6 5
6 8
7 1
...

user output
12
1 7
7 8
8 6
6 5
...

Test 21

Verdict: ACCEPTED

input
37 54
37 31
14 31
37 15
14 15
...

correct output
54
6 2
6 7
6 19
6 30
...

user output
54
1 20
20 35
35 6
6 2
...

Test 22

Verdict: ACCEPTED

input
397 594
370 81
16 81
370 215
16 215
...

correct output
594
4 19
4 31
4 60
4 110
...

user output
594
1 208
208 44
44 127
127 382
...

Test 23

Verdict: ACCEPTED

input
997 1494
555 594
295 594
555 422
295 422
...

correct output
1494
6 214
6 280
6 455
6 472
...

user output
1494
1 945
945 254
254 183
183 274
...

Test 24

Verdict: ACCEPTED

input
6 8
5 3
6 3
5 4
6 4
...

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

user output
8
1 5
5 3
3 6
6 4
...

Test 25

Verdict: ACCEPTED

input
11 16
6 5
11 5
6 3
11 3
...

correct output
16
2 1
2 7
2 8
2 9
...

user output
16
1 11
11 5
5 6
6 3
...

Test 26

Verdict: ACCEPTED

input
46 72
20 46
33 46
20 15
33 15
...

correct output
72
2 4
2 5
2 10
2 11
...

user output
72
1 16
16 22
22 31
31 4
...

Test 27

Verdict: ACCEPTED

input
496 792
129 244
128 244
129 230
128 230
...

correct output
792
3 15
3 29
3 428
3 447
...

user output
792
1 437
437 305
305 69
69 168
...

Test 28

Verdict: ACCEPTED

input
996 1592
940 446
864 446
940 50
864 50
...

correct output
1592
2 362
2 482
2 545
2 572
...

user output
1592
1 531
531 438
438 870
870 683
...

Test 29

Verdict: ACCEPTED

input
3 2
3 1
2 1

correct output
2
2 1
3 1

user output
2
1 3
1 2

Test 30

Verdict: ACCEPTED

input
5 4
5 3
1 3
1 2
4 2

correct output
4
1 2
1 3
4 2
5 3

user output
4
1 3
3 5
1 2
2 4

Test 31

Verdict: ACCEPTED

input
19 18
5 2
1 2
1 4
15 4
...

correct output
18
1 2
1 4
5 2
7 10
...

user output
18
1 2
2 5
1 4
4 15
...

Test 32

Verdict: ACCEPTED

input
199 198
20 93
53 93
53 7
152 7
...

correct output
198
3 44
3 128
5 18
5 184
...

user output
198
1 87
87 95
95 156
156 142
...

Test 33

Verdict: ACCEPTED

input
999 998
481 471
242 471
242 95
525 95
...

correct output
998
2 267
2 303
3 378
3 644
...

user output
998
1 180
180 316
316 422
422 127
...

Test 34

Verdict: ACCEPTED

input
4 4
2 4
1 4
2 3
1 3

correct output
4
1 3
1 4
2 3
2 4

user output
4
1 4
4 2
2 3
1 3

Test 35

Verdict: ACCEPTED

input
7 8
2 7
4 7
2 5
4 5
...

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

user output
8
1 4
4 7
7 2
2 5
...

Test 36

Verdict: ACCEPTED

input
28 36
22 9
24 9
22 5
24 5
...

correct output
36
3 8
3 18
3 21
3 27
...

user output
36
1 11
11 4
4 25
25 2
...

Test 37

Verdict: ACCEPTED

input
298 396
293 290
133 290
293 228
133 228
...

correct output
396
1 62
1 112
1 174
1 250
...

user output
396
1 112
112 178
178 12
12 109
...

Test 38

Verdict: ACCEPTED

input
1000 1332
949 882
156 882
949 515
156 515
...

correct output
1332
2 508
2 774
2 885
2 921
...

user output
1332
1 880
880 118
118 631
631 123
...