CSES - KILO 2017 4/5 - Results
Submission details
Task:Flowery Trails
Sender:liianvaikeitatehtäviä
Submission time:2017-09-26 17:28:20 +0300
Language:C++
Status:READY
Result:ACCEPTED
Test results
testverdicttime
#1ACCEPTED0.09 sdetails
#2ACCEPTED0.07 sdetails
#3ACCEPTED0.44 sdetails
#4ACCEPTED0.42 sdetails
#5ACCEPTED0.28 sdetails
#6ACCEPTED0.32 sdetails
#7ACCEPTED0.35 sdetails
#8ACCEPTED0.32 sdetails
#9ACCEPTED0.38 sdetails
#10ACCEPTED0.32 sdetails

Code

#include <bits/stdc++.h>
typedef long long ll;
using namespace std;
#define F first
#define S second
vector<pair<ll, ll> > v[1010101];
ll dist1[1010101];
ll dist2[1010101];
int main() {
	int n,m;
	cin>>n>>m;
	priority_queue<pair<int, int> > qu;
	for(int i = 0; i < m; ++i) {
		int a,b,c;
		cin>>a>>b>>c;
		if(a != b) {
			v[a].push_back({b, c});
			v[b].push_back({a, c});
		}
	}
	for(int i = 0; i < 1010101; ++i) {
		dist1[i] = 1e18;
		dist2[i] = 1e18;
	}
	dist1[1] = 0;
	qu.push({0, 1});
	while(qu.size()) {
		auto x = qu.top();
		qu.pop();
		int node = x.S;
		for(auto y: v[node]) {
			ll nd = -x.F + y.S;
			ll np = y.F;
			if(dist1[np] > nd) {
				dist1[np] = nd;
				qu.push({-nd, np});
			}
		}
	}
	qu.push({0, n});
	dist2[n] = 0;
	while(qu.size()) {
		auto x = qu.top();
		qu.pop();
		int node = x.S;
		for(auto y: v[node]) {
			ll nd = -x.F + y.S;
			ll np = y.F;
			if(dist2[np] > nd) {
				dist2[np] = nd;
				qu.push({-nd, np});
			}
		}
	}
	ll sum = 0;
	for(int i = 1; i <= n; ++i) {
		for(auto y: v[i]) {
			if(dist1[i] < dist1[y.F]) {
				ll a = dist1[i];
				ll b = dist2[y.F];
				if(a + b + y.S == dist1[n]) sum += y.S;
			}
		}
	}
	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