#include<bits/stdc++.h>
#define pb push_back
#define x first
#define y second
#define all(a) (a).begin(), (a).end()
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
const int maxn = 2e5 + 5;
const ll inf = 1e18;
int n, m, s, t, u, v;
vector<pair<int, ll>> adj[maxn];
vector<int> G[maxn];
ll D[5][maxn];
ll mini[maxn];
int deg[maxn];
void get_dist(int X, int p) {
vector<ll> dist(n, inf);
dist[X] = 0;
set<pair<ll, int>> q;
q.insert({0, X});
while(q.size()) {
auto state = *q.begin();
q.erase(state);
int x = state.y;
for(auto P : adj[x]) {
int y = P.x;
ll c = P.y;
if(dist[y] == inf) {
dist[y] = dist[x] + c;
q.insert({dist[y], y});
} else if(dist[x] + c < dist[y]) {
q.erase({dist[y], y});
dist[y] = dist[x] + c;
q.insert({dist[y], y});
}
}
}
for(int i = 0;i < n;i++)
D[p][i] = dist[i];
}
vector<int> get_topo() {
for(int i = 0;i < n;i++)
for(auto p : adj[i])
if(D[0][t] == D[0][i] + p.y + D[1][p.x])
G[i].pb(p.x), deg[p.x]++;
queue<int> q;
for(int i = 0;i < n;i++)
if(deg[i] == 0) q.push(i);
vector<int> V;
while(q.size()) {
int x = q.front();
q.pop(), V.pb(x);
for(int y : G[x]) {
deg[y]--;
if(deg[y] == 0)
q.push(y);
}
}
reverse(all(V));
return V;
}
int main() {
scanf("%d%d%d%d%d%d", &n, &m, &s, &t, &u, &v);
s--, t--, u--, v--;
for(int i = 0;i < m;i++) {
int x, y, c;
scanf("%d%d%d", &x, &y, &c);
x--, y--;
adj[x].pb({y, c}), adj[y].pb({x, c});
}
get_dist(s, 0);
get_dist(t, 1);
get_dist(u, 2);
get_dist(v, 3);
vector<int> topo = get_topo();
ll ans = inf;
for(int x : topo) {
mini[x] = D[3][x];
for(int y : G[x])
mini[x] = min(mini[x], mini[y]);
ans = min(ans, D[2][x] + mini[x]);
}
for(int x : topo) {
mini[x] = D[2][x];
for(int y : G[x])
mini[x] = min(mini[x], mini[y]);
ans = min(ans, D[3][x] + mini[x]);
}
printf("%lld\n", ans);
return 0;
}
Compilation message
commuter_pass.cpp: In function 'int main()':
commuter_pass.cpp:76:7: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
76 | scanf("%d%d%d%d%d%d", &n, &m, &s, &t, &u, &v);
| ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
commuter_pass.cpp:80:8: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
80 | scanf("%d%d%d", &x, &y, &c);
| ~~~~~^~~~~~~~~~~~~~~~~~~~~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
538 ms |
28460 KB |
Output is correct |
2 |
Correct |
535 ms |
27944 KB |
Output is correct |
3 |
Correct |
499 ms |
28072 KB |
Output is correct |
4 |
Correct |
482 ms |
28484 KB |
Output is correct |
5 |
Correct |
415 ms |
27888 KB |
Output is correct |
6 |
Correct |
558 ms |
28536 KB |
Output is correct |
7 |
Correct |
465 ms |
27748 KB |
Output is correct |
8 |
Correct |
481 ms |
27948 KB |
Output is correct |
9 |
Correct |
454 ms |
27688 KB |
Output is correct |
10 |
Correct |
328 ms |
27824 KB |
Output is correct |
11 |
Correct |
210 ms |
22036 KB |
Output is correct |
12 |
Correct |
478 ms |
27320 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
516 ms |
28148 KB |
Output is correct |
2 |
Correct |
519 ms |
29328 KB |
Output is correct |
3 |
Correct |
575 ms |
29116 KB |
Output is correct |
4 |
Correct |
459 ms |
29192 KB |
Output is correct |
5 |
Correct |
482 ms |
29096 KB |
Output is correct |
6 |
Correct |
477 ms |
29184 KB |
Output is correct |
7 |
Correct |
508 ms |
29516 KB |
Output is correct |
8 |
Correct |
501 ms |
30064 KB |
Output is correct |
9 |
Correct |
518 ms |
30192 KB |
Output is correct |
10 |
Correct |
509 ms |
29128 KB |
Output is correct |
11 |
Correct |
140 ms |
23976 KB |
Output is correct |
12 |
Correct |
407 ms |
30424 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
12 ms |
11476 KB |
Output is correct |
2 |
Correct |
6 ms |
9788 KB |
Output is correct |
3 |
Correct |
5 ms |
9812 KB |
Output is correct |
4 |
Correct |
19 ms |
13104 KB |
Output is correct |
5 |
Correct |
15 ms |
11476 KB |
Output is correct |
6 |
Correct |
6 ms |
9848 KB |
Output is correct |
7 |
Correct |
9 ms |
9804 KB |
Output is correct |
8 |
Correct |
7 ms |
9940 KB |
Output is correct |
9 |
Correct |
6 ms |
9756 KB |
Output is correct |
10 |
Correct |
12 ms |
11388 KB |
Output is correct |
11 |
Correct |
6 ms |
9684 KB |
Output is correct |
12 |
Correct |
6 ms |
9708 KB |
Output is correct |
13 |
Correct |
6 ms |
9684 KB |
Output is correct |
14 |
Correct |
7 ms |
9720 KB |
Output is correct |
15 |
Correct |
6 ms |
9812 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
538 ms |
28460 KB |
Output is correct |
2 |
Correct |
535 ms |
27944 KB |
Output is correct |
3 |
Correct |
499 ms |
28072 KB |
Output is correct |
4 |
Correct |
482 ms |
28484 KB |
Output is correct |
5 |
Correct |
415 ms |
27888 KB |
Output is correct |
6 |
Correct |
558 ms |
28536 KB |
Output is correct |
7 |
Correct |
465 ms |
27748 KB |
Output is correct |
8 |
Correct |
481 ms |
27948 KB |
Output is correct |
9 |
Correct |
454 ms |
27688 KB |
Output is correct |
10 |
Correct |
328 ms |
27824 KB |
Output is correct |
11 |
Correct |
210 ms |
22036 KB |
Output is correct |
12 |
Correct |
478 ms |
27320 KB |
Output is correct |
13 |
Correct |
516 ms |
28148 KB |
Output is correct |
14 |
Correct |
519 ms |
29328 KB |
Output is correct |
15 |
Correct |
575 ms |
29116 KB |
Output is correct |
16 |
Correct |
459 ms |
29192 KB |
Output is correct |
17 |
Correct |
482 ms |
29096 KB |
Output is correct |
18 |
Correct |
477 ms |
29184 KB |
Output is correct |
19 |
Correct |
508 ms |
29516 KB |
Output is correct |
20 |
Correct |
501 ms |
30064 KB |
Output is correct |
21 |
Correct |
518 ms |
30192 KB |
Output is correct |
22 |
Correct |
509 ms |
29128 KB |
Output is correct |
23 |
Correct |
140 ms |
23976 KB |
Output is correct |
24 |
Correct |
407 ms |
30424 KB |
Output is correct |
25 |
Correct |
12 ms |
11476 KB |
Output is correct |
26 |
Correct |
6 ms |
9788 KB |
Output is correct |
27 |
Correct |
5 ms |
9812 KB |
Output is correct |
28 |
Correct |
19 ms |
13104 KB |
Output is correct |
29 |
Correct |
15 ms |
11476 KB |
Output is correct |
30 |
Correct |
6 ms |
9848 KB |
Output is correct |
31 |
Correct |
9 ms |
9804 KB |
Output is correct |
32 |
Correct |
7 ms |
9940 KB |
Output is correct |
33 |
Correct |
6 ms |
9756 KB |
Output is correct |
34 |
Correct |
12 ms |
11388 KB |
Output is correct |
35 |
Correct |
6 ms |
9684 KB |
Output is correct |
36 |
Correct |
6 ms |
9708 KB |
Output is correct |
37 |
Correct |
6 ms |
9684 KB |
Output is correct |
38 |
Correct |
7 ms |
9720 KB |
Output is correct |
39 |
Correct |
6 ms |
9812 KB |
Output is correct |
40 |
Correct |
544 ms |
33048 KB |
Output is correct |
41 |
Correct |
471 ms |
30164 KB |
Output is correct |
42 |
Correct |
438 ms |
30208 KB |
Output is correct |
43 |
Correct |
182 ms |
25008 KB |
Output is correct |
44 |
Correct |
155 ms |
25080 KB |
Output is correct |
45 |
Correct |
370 ms |
31060 KB |
Output is correct |
46 |
Correct |
387 ms |
31020 KB |
Output is correct |
47 |
Correct |
485 ms |
31192 KB |
Output is correct |
48 |
Correct |
190 ms |
24636 KB |
Output is correct |
49 |
Correct |
453 ms |
32216 KB |
Output is correct |
50 |
Correct |
394 ms |
30460 KB |
Output is correct |
51 |
Correct |
343 ms |
30964 KB |
Output is correct |