| Task: | Flowery Trails |
| Sender: | liianvaikeitatehtäviä |
| Submission time: | 2017-09-26 17:28:20 +0300 |
| Language: | C++ |
| Status: | READY |
| Result: | ACCEPTED |
| test | verdict | time | |
|---|---|---|---|
| #1 | ACCEPTED | 0.09 s | details |
| #2 | ACCEPTED | 0.07 s | details |
| #3 | ACCEPTED | 0.44 s | details |
| #4 | ACCEPTED | 0.42 s | details |
| #5 | ACCEPTED | 0.28 s | details |
| #6 | ACCEPTED | 0.32 s | details |
| #7 | ACCEPTED | 0.35 s | details |
| #8 | ACCEPTED | 0.32 s | details |
| #9 | ACCEPTED | 0.38 s | details |
| #10 | ACCEPTED | 0.32 s | details |
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 |
