CSES - BAPC 2017 - Results
Submission details
Task:Detour
Sender:Qianyun Guo
Submission time:2017-10-24 19:14:04 +0300
Language:C++
Status:READY
Result:ACCEPTED
Test results
testverdicttime
#1ACCEPTED0.04 sdetails
#2ACCEPTED0.04 sdetails
#3ACCEPTED0.04 sdetails
#4ACCEPTED0.07 sdetails
#5ACCEPTED0.05 sdetails
#6ACCEPTED0.04 sdetails
#7ACCEPTED0.03 sdetails
#8ACCEPTED0.06 sdetails
#9ACCEPTED0.07 sdetails
#10ACCEPTED0.04 sdetails
#11ACCEPTED0.04 sdetails
#12ACCEPTED0.13 sdetails
#13ACCEPTED0.06 sdetails
#14ACCEPTED0.03 sdetails
#15ACCEPTED0.05 sdetails
#16ACCEPTED0.21 sdetails
#17ACCEPTED0.20 sdetails
#18ACCEPTED0.04 sdetails
#19ACCEPTED0.03 sdetails
#20ACCEPTED0.04 sdetails
#21ACCEPTED0.03 sdetails
#22ACCEPTED0.05 sdetails
#23ACCEPTED0.03 sdetails
#24ACCEPTED0.04 sdetails
#25ACCEPTED0.04 sdetails
#26ACCEPTED0.04 sdetails
#27ACCEPTED0.06 sdetails
#28ACCEPTED0.04 sdetails
#29ACCEPTED0.04 sdetails
#30ACCEPTED0.05 sdetails
#31ACCEPTED0.06 sdetails
#32ACCEPTED0.08 sdetails
#33ACCEPTED0.08 sdetails
#34ACCEPTED0.08 sdetails
#35ACCEPTED0.09 sdetails
#36ACCEPTED0.08 sdetails

Code

#include<bits/stdc++.h>
using namespace std;

const int INF = RAND_MAX;
int n, m;
vector<pair<int, int> > edge[100010];
int parent[100010];
vector<long long> dist(100010);

void dijkstra(int start) {
    for (int i = 0; i < n; i++)
        parent[i] = -1;

    set<pair<int, int> > setds;
    for (int i = 0; i < n; i++)
        dist[i] = INF;

    setds.insert(make_pair(0, start));
    dist[start] = 0;

    while (!setds.empty()) {
        pair<int, int> tmp = *(setds.begin());
        setds.erase(setds.begin());

        int u = tmp.second;
        for (auto i = edge[u].begin(); i != edge[u].end(); i++){
            int v = i->first;
            int weight = i->second;
            
            if (dist[v] > dist[u] + weight) {
                if (dist[v] != INF)
                    setds.erase(setds.find(make_pair(dist[v], v)));
                parent[v] = u;
                dist[v] = dist[u] + weight;
                setds.insert(make_pair(dist[v], v));
            }
        }
    }
}

void remove(){
    for (int i = 0; i < n; i++) {
        for (auto j = edge[i].begin(); j != edge[i].end(); j++) {
            if (j->first == parent[i]) {
                j->second = INF;
                break;
            }
        }
    }
}

int main() {
    cin >> n >> m;
    for (int i = 0; i < m; i++) {
        int u, v, d;
        cin >> u >> v >> d;
        edge[u].push_back(make_pair(v, d));
        edge[v].push_back(make_pair(u, d));
    }
    dijkstra(1);
    remove();
    dijkstra(0);

    if (dist[1] >= INF)
        cout << "impossible" << endl;
    else{ 
        vector<int> t;
        int u = 1;
        while (u != -1) {
            t.push_back(u);
            u = parent[u];
        }
        cout << (int) t.size();
        for (auto i = t.rbegin(); i != t.rend(); i++){
            cout << ' ' << (*i);
        }
    }
    
    return 0;
}

Test details

Test 1

Verdict: ACCEPTED

input
12 12
6 3 81
1 0 100
0 7 90
1 8 110
...

correct output
impossible

user output
impossible

Test 2

Verdict: ACCEPTED

input
45 990
0 1 37770
0 2 202571
0 3 7492
0 4 22678
...

correct output
5 0 36 17 34 1

user output
5 0 36 17 34 1

Test 3

Verdict: ACCEPTED

input
45 990
0 1 247530
0 2 417002
0 3 352223
0 4 342984
...

correct output
3 0 11 1

user output
3 0 11 1

Test 4

Verdict: ACCEPTED

input
484 924
459 478 90469
372 441 103116
25 396 123727
416 115 167580
...

correct output
impossible

user output
impossible

Test 5

Verdict: ACCEPTED

input
1000 1000
181 16 402132
585 137 419860
463 188 484066
933 709 493402
...

correct output
impossible

user output
impossible

Test 6

Verdict: ACCEPTED

input
1000 5000
308 824 971
843 327 594
246 424 593
931 755 566
...

correct output
8 0 836 157 470 591 405 294 1

user output
8 0 836 157 470 591 405 294 1

Test 7

Verdict: ACCEPTED

input
1000 5000
222 785 459
786 572 87
824 990 1220
152 284 1138
...

correct output
6 0 98 658 162 669 1

user output
6 0 98 658 162 669 1

Test 8

Verdict: ACCEPTED

input
1000 20000
121 738 3832
235 903 3796
771 433 1967
960 260 4454
...

correct output
3 0 193 1

user output
3 0 193 1

Test 9

Verdict: ACCEPTED

input
1000 20000
515 416 1284
142 303 3021
561 705 1212
662 963 4088
...

correct output
7 0 931 506 812 978 279 1

user output
7 0 931 506 812 978 279 1

Test 10

Verdict: ACCEPTED

input
1000 1156
97 275 286
607 425 54
30 152 347
231 67 337
...

correct output
impossible

user output
impossible

Test 11

Verdict: ACCEPTED

input
1000 2015
620 884 256
238 223 400
138 620 165
189 668 70
...

correct output
impossible

user output
impossible

Test 12

Verdict: ACCEPTED

input
50001 75001
0 2 1
2 3 1
3 4 1
4 5 1
...

correct output
25000 0 4 6 8 10 12 14 16 18 2...

user output
25000 0 4 6 8 10 12 14 16 18 2...

Test 13

Verdict: ACCEPTED

input
1001 1501
0 2 1
2 3 1
3 4 1
4 5 1
...

correct output
500 0 4 6 8 10 12 14 16 18 20 ...

user output
500 0 4 6 8 10 12 14 16 18 20 ...

Test 14

Verdict: ACCEPTED

input
2001 2005
0 3 3
3 4 1
4 5 3
5 6 3
...

correct output
impossible

user output
impossible

Test 15

Verdict: ACCEPTED

input
2001 2007
0 2 1
2 3 1
3 4 1
4 5 1
...

correct output
218 0 10 9 8 7 6 100 99 400 39...

user output
218 0 10 9 8 7 6 100 99 400 39...

Test 16

Verdict: ACCEPTED

input
10000 100000
8865 5390 8390
3911 3120 16356
2155 8860 5312
1660 2808 15360
...

correct output
9 0 6336 6942 3767 5249 6076 7...

user output
9 0 6336 6942 3767 5249 6076 7...

Test 17

Verdict: ACCEPTED

input
20000 99992
5068 10219 683
13643 5445 15656
10464 14025 12163
18066 2410 379
...

correct output
10 0 12600 16920 11197 2863 10...

user output
10 0 12600 16920 11197 2863 10...

Test 18

Verdict: ACCEPTED

input
50 200
19 13 90
7 38 84
37 9 71
42 18 17
...

correct output
3 0 41 1

user output
3 0 41 1

Test 19

Verdict: ACCEPTED

input
50 200
16 26 17
18 45 56
24 47 20
27 2 98
...

correct output
7 0 4 3 21 36 46 1

user output
7 0 4 3 21 36 46 1

Test 20

Verdict: ACCEPTED

input
50 500
5 38 125
38 4 15
3 19 74
28 30 70
...

correct output
3 0 46 1

user output
3 0 46 1

Test 21

Verdict: ACCEPTED

input
50 750
25 42 122
43 29 37
40 42 50
5 10 37
...

correct output
3 0 24 1

user output
3 0 24 1

Test 22

Verdict: ACCEPTED

input
50 100
30 1 15
31 7 9
13 20 2
43 41 16
...

correct output
impossible

user output
impossible

Test 23

Verdict: ACCEPTED

input
2 1
0 1 1

correct output
impossible

user output
impossible

Test 24

Verdict: ACCEPTED

input
5 6
0 2 10
2 1 10
2 3 5
3 1 10
...

correct output
impossible

user output
impossible

Test 25

Verdict: ACCEPTED

input
6 8
0 5 5
1 5 5
0 2 10
2 1 10
...

correct output
5 0 2 3 4 1

user output
5 0 2 3 4 1

Test 26

Verdict: ACCEPTED

input
10 11
4 2 6
8 0 7
5 3 9
5 9 5
...

correct output
impossible

user output
impossible

Test 27

Verdict: ACCEPTED

input
10 20
0 3 5
0 7 2
1 8 7
4 9 8
...

correct output
4 0 9 8 1

user output
4 0 9 8 1

Test 28

Verdict: ACCEPTED

input
10 20
1 9 5
5 8 8
4 5 4
7 9 7
...

correct output
3 0 7 1

user output
3 0 7 1

Test 29

Verdict: ACCEPTED

input
10 45
4 7 9
6 0 1
4 5 3
3 9 4
...

correct output
2 0 1

user output
2 0 1

Test 30

Verdict: ACCEPTED

input
10 45
8 7 2
5 6 17
2 0 11
7 9 7
...

correct output
3 0 8 1

user output
3 0 8 1

Test 31

Verdict: ACCEPTED

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

correct output
4 0 3 2 1

user output
4 0 3 2 1

Test 32

Verdict: ACCEPTED

input
5000 20004
4934 3850 3901
4737 4183 9932
2434 4806 8895
2254 3238 9739
...

correct output
10 0 472 2245 1984 22 1349 186...

user output
10 0 472 2245 1984 22 1349 186...

Test 33

Verdict: ACCEPTED

input
5000 20002
722 3243 6823
2087 2234 6716
895 4028 3850
2235 2837 1751
...

correct output
impossible

user output
impossible

Test 34

Verdict: ACCEPTED

input
5000 20001
3790 2581 6986
2675 2646 673
4762 4055 284
679 3234 5098
...

correct output
impossible

user output
impossible

Test 35

Verdict: ACCEPTED

input
10000 20207
7918 5203 2577
8427 684 280
6378 5210 2723
5990 5019 2482
...

correct output
impossible

user output
impossible

Test 36

Verdict: ACCEPTED

input
10000 20205
1789 3919 6918
9162 9077 2792
2649 796 2018
6481 9465 2188
...

correct output
impossible

user output
impossible