CSES - KILO 2017 4/5 - Results
Submission details
Task:Flowery Trails
Sender:AVL-tiimi
Submission time:2017-09-26 18:07:03 +0300
Language:C++
Status:READY
Result:ACCEPTED
Test results
testverdicttime
#1ACCEPTED0.04 sdetails
#2ACCEPTED0.04 sdetails
#3ACCEPTED0.39 sdetails
#4ACCEPTED0.34 sdetails
#5ACCEPTED0.29 sdetails
#6ACCEPTED0.13 sdetails
#7ACCEPTED0.21 sdetails
#8ACCEPTED0.17 sdetails
#9ACCEPTED0.16 sdetails
#10ACCEPTED0.21 sdetails

Compiler report

input/code.cpp: In function 'int main()':
input/code.cpp:33:35: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (int j = 0; j < v[i].size(); ++j) {
                                   ^

Code

#include <iostream>
#include <algorithm>
#include <queue>
#include <set>
using namespace std;
#define F first
#define S second
int d[10000], d2[10000], L[250000];
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  int n, m;
  cin >> n >> m;
  vector<pair<int, int>> v[n];
  vector<int> uid[n];
  set<int> g[n];
  for (int i = 0; i < m; ++i) {
    int a, b, l;
    cin >> a >> b >> l;
    v[--a].push_back({--b, l});
    v[b].push_back({a, l});
    uid[a].push_back(i);
    uid[b].push_back(i);
    L[i] = l;
  }
  for (int i = 0; i < n; ++i) d[i] = 1e9, d2[i] = 1e9;
  priority_queue<pair<int, int>> q;
  q.push({0, 0});
  d[0] = 0;
  while (!q.empty()) {
    int i = q.top().S;
    q.pop();
    for (int j = 0; j < v[i].size(); ++j) {
      pair<int, int> p = v[i][j];
      if (d[i]+p.S < d[p.F]) {
        d[p.F] = d[i]+p.S;
        q.push({-d[p.F], p.F});
        g[p.F].clear();
        g[p.F].insert(uid[i][j]);
      } else if (d[i]+p.S == d[p.F]) g[p.F].insert(uid[i][j]);
    }
  }
  long sum = 0;
  set<int> chosen;
  q = priority_queue<pair<int, int>>();
  q.push({0, n-1});
  d2[n-1] = 0;
  while (!q.empty()) {
    int i = q.top().S;
    q.pop();
    if (d[i]+d2[i] == d[n-1]) {
      for (int ge : g[i]) {
        chosen.insert(ge);
      }
    }
    for (pair<int, int> p : v[i]) {
      if (d2[i]+p.S < d2[p.F]) {
        d2[p.F] = d2[i]+p.S;
        q.push({-d2[p.F], p.F});
      }
    }
  }
  for (int i : chosen) {
    sum += L[i];
  }
  cout << sum*2 << endl;
}

Test details

Test 1

Verdict: ACCEPTED

input
10 15
1 2 580
2 5 90
2 5 90
5 10 250
...

correct output
3860

user output
3860

Test 2

Verdict: ACCEPTED

input
4 7
1 2 1
1 3 2
1 4 10
1 4 3
...

correct output
18

user output
18

Test 3

Verdict: ACCEPTED

input
500 249500
1 2 1
1 2 1
1 3 1000
1 3 1000
...

correct output
1996

user output
1996

Test 4

Verdict: ACCEPTED

input
500 249500
1 2 1
1 2 10
1 3 999
1 3 1000
...

correct output
998

user output
998

Test 5

Verdict: ACCEPTED

input
4096 245680
1 2 1
1 3 1
2 4 1
2 5 1
...

correct output
491360

user output
491360

Test 6

Verdict: ACCEPTED

input
5000 246585
1 2 1
1 3 1
2 4 1
2 5 1
...

correct output
12284

user output
12284

Test 7

Verdict: ACCEPTED

input
10000 250000
966 4849 16
6751 3592 929
5263 5263 21
3001 6112 852
...

correct output
76

user output
76

Test 8

Verdict: ACCEPTED

input
9999 250000
9488 9488 958
3806 3806 742
4895 4600 223
9024 9024 799
...

correct output
202

user output
202

Test 9

Verdict: ACCEPTED

input
9999 250000
9396 4472 7
7056 45 7
6747 7491 5
4382 5641 5
...

correct output
82

user output
82

Test 10

Verdict: ACCEPTED

input
10000 250000
5779 9141 578
6851 288 305
7139 2759 834
4526 8082 748
...

correct output
422

user output
422