CSES - KILO 2017 4/5 - Results
Submission details
Task:Flowery Trails
Sender:team univelka
Submission time:2017-09-26 17:04:28 +0300
Language:C++
Status:READY
Result:ACCEPTED
Test results
testverdicttime
#1ACCEPTED0.05 sdetails
#2ACCEPTED0.06 sdetails
#3ACCEPTED0.44 sdetails
#4ACCEPTED0.49 sdetails
#5ACCEPTED0.38 sdetails
#6ACCEPTED0.49 sdetails
#7ACCEPTED0.55 sdetails
#8ACCEPTED0.59 sdetails
#9ACCEPTED0.61 sdetails
#10ACCEPTED0.51 sdetails

Compiler report

input/code.cpp: In function 'void djikstra(int, int)':
input/code.cpp:21:38: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
    for (int j = 0; j < conns[i].size(); ++j) {
                                      ^
input/code.cpp: In function 'int main()':
input/code.cpp:47:38: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
    for (int j = 0; j < conns[i].size(); ++j) {
                                      ^

Code

#include <iostream>
#include <queue>
#include <utility>
#include <vector>

const int N = 10000;
long long dist [N][2];
std::vector<int> conns [N];
std::vector<int> cost [N];

void djikstra(int s, int ind) {
	std::priority_queue<std::pair<long long, int>> que;
	que.push({-1,s});
	while(! que.empty()) {
		std::pair<long long, int> node = que.top();
		que.pop();

		int i = node.second;
		if (dist[i][ind] == 0) {
			dist[i][ind] = -node.first;
			for (int j = 0; j < conns[i].size(); ++j) {
				int t = conns[i][j];
				que.push({node.first - cost[i][j], t});
			}
		}
	}
}

int main() {
	int n, m;
	std::cin >> n >> m;
	for (int i = 0; i < m; ++i) {
		int a, b, c;
		std::cin >> a >> b >> c;
		--a; --b;
		conns[a].push_back(b);
		cost[a].push_back(c);
		conns[b].push_back(a);
		cost[b].push_back(c);
	}
	djikstra(0, 0);
	djikstra(n-1, 1);
	long long val = dist[0][0] + dist[0][1];
	long long total = 0;
	for (int i = 0; i < n; ++i) {
		if (dist[i][0] + dist[i][1] == val) {
			for (int j = 0; j < conns[i].size(); ++j) {
				int t = conns[i][j];
				if (dist[t][0] + dist[t][1] == val) {
					if (cost[i][j] == std::abs(dist[t][0] - dist[i][0])) total += cost[i][j];
				}
			}
		}
	}
	std::cout << total << '\n';
}

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