#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef vector<int> vi;
typedef vector<pair<int, int>> vii;
typedef pair<int, int> pi;
#define MOD 1000000007LL
int N, M, S, T, U, V;
vector<pair<int, ll>> adj[100001];
ll disu[100001], disv[100001], diss[100001];
bool vis[100001];
bool indag[100001]={false};
ll dpu[100001], dpv[100001]; // shortest path from u/v to node in dag (where edges are 0 in dag --> cascade)
void dij(int s, ll (&dis)[100001]) {
memset(vis, 0, sizeof(vis));
for (int i = 1; i <= N; i++) dis[i] = 1e18;
dis[s] = 0;
using T = pair<ll, ll>; priority_queue<T, vector<T>, greater<T>> q;
q.push({0, s});
while (!q.empty()) {
int v = q.top().second; q.pop();
if (vis[v]) continue;
vis[v] = true;
for (auto pp : adj[v]) {
ll u = pp.first, w = pp.second;
if (dis[v]+w < dis[u]) {
dis[u] = dis[v]+w;
q.push({dis[u], u});
}
}
}
}
void cdag(int v) {
if (indag[v]) return;
indag[v] = true;
for (auto pp : adj[v]) {
ll u = pp.first, w = pp.second;
if (diss[u]+w == diss[v]) cdag(u);
}
}
// starting from S to T
ll rdpu(int v) {
if (dpu[v] != -1) return dpu[v];
ll res = disu[v];
for (auto pp : adj[v]) {
ll u = pp.first, w = pp.second;
if (indag[u] && diss[u]+w == diss[v]) res = min(res, rdpu(u));
}
return dpu[v] = res;
}
// starting from T to S
ll rdpv(int v) {
if (dpv[v] != -1) return dpv[v];
ll res = disv[v];
for (auto pp : adj[v]) {
ll u = pp.first, w = pp.second;
if (indag[u] && diss[v]+w == diss[u]) res = min(res, rdpv(u));
}
return dpv[v] = res;
}
int main() {
//freopen("feast.in", "r", stdin);
//freopen("feast.out", "w", stdout);
//ios_base::sync_with_stdio(false);
//cin.tie(0);
cin >> N >> M >> S >> T >> U >> V;
for (int i = 0; i < M; i++) {
int a, b, c; cin >> a >> b >> c;
adj[a].push_back({b, c});
adj[b].push_back({a, c});
}
dij(U, disu); dij(V, disv); dij(S, diss);
//cout << "Debugging dijkstras" << endl;
//for (int i = 1; i <= N; i++) cout << disu[i] << " "; cout << endl;
//for (int i = 1; i <= N; i++) cout << disv[i] << " "; cout << endl;
//for (int i = 1; i <= N; i++) cout << diss[i] << " "; cout << endl;
cdag(T);
//cout << "Debugging nodes in dag" << endl;
//for (int i = 1; i <= N; i++) cout << indag[i] << " "; cout << endl;
for (int i = 1; i <= N; i++) {
if (indag[i]) {
dpu[i] = -1; //disu[i];
dpv[i] = -1; //disv[i];
} else {
dpu[i] = 1e18;
dpv[i] = 1e18;
}
}
// first case: U is closer to S
rdpu(T); rdpv(S);
//cout << "Debugging dps" << endl;
//for (int i = 1; i <= N; i++) cout << dpu[i] << " "; cout << endl;
//for (int i = 1; i <= N; i++) cout << dpv[i] << " "; cout << endl;
ll ans = disu[V];
for (int i = 1; i <= N; i++)
if (indag[i]) ans = min(ans, dpu[i]+dpv[i]);
// second case: U is closer to T
for (int i = 1; i <= N; i++) {
if (indag[i]) {
dpv[i] = -1;
dpu[i] = -1;
} else {
dpv[i] = 1e18;
dpu[i] = 1e18;
}
}
swap(disu, disv);
rdpu(T); rdpv(S);
for (int i = 1; i <= N; i++)
if (indag[i]) ans = min(ans, dpu[i]+dpv[i]);
//cout << "Debugging dps2" << endl;
//for (int i = 1; i <= N; i++) cout << dpu[i] << " "; cout << endl;
//for (int i = 1; i <= N; i++) cout << dpv[i] << " "; cout << endl;
cout << ans << endl;
}
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
479 ms |
22508 KB |
Output is correct |
2 |
Correct |
461 ms |
21104 KB |
Output is correct |
3 |
Correct |
541 ms |
25308 KB |
Output is correct |
4 |
Correct |
441 ms |
23008 KB |
Output is correct |
5 |
Correct |
485 ms |
20852 KB |
Output is correct |
6 |
Correct |
448 ms |
22820 KB |
Output is correct |
7 |
Correct |
528 ms |
21000 KB |
Output is correct |
8 |
Correct |
508 ms |
21252 KB |
Output is correct |
9 |
Correct |
459 ms |
21876 KB |
Output is correct |
10 |
Correct |
428 ms |
21708 KB |
Output is correct |
11 |
Correct |
250 ms |
16620 KB |
Output is correct |
12 |
Correct |
507 ms |
21580 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
495 ms |
22996 KB |
Output is correct |
2 |
Correct |
505 ms |
23052 KB |
Output is correct |
3 |
Correct |
465 ms |
22492 KB |
Output is correct |
4 |
Correct |
478 ms |
22932 KB |
Output is correct |
5 |
Correct |
506 ms |
23124 KB |
Output is correct |
6 |
Correct |
526 ms |
24820 KB |
Output is correct |
7 |
Correct |
570 ms |
25048 KB |
Output is correct |
8 |
Correct |
490 ms |
22892 KB |
Output is correct |
9 |
Correct |
491 ms |
23120 KB |
Output is correct |
10 |
Correct |
512 ms |
22596 KB |
Output is correct |
11 |
Correct |
269 ms |
18028 KB |
Output is correct |
12 |
Correct |
542 ms |
25364 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
25 ms |
6124 KB |
Output is correct |
2 |
Correct |
4 ms |
4460 KB |
Output is correct |
3 |
Correct |
4 ms |
4460 KB |
Output is correct |
4 |
Correct |
44 ms |
7916 KB |
Output is correct |
5 |
Correct |
24 ms |
6124 KB |
Output is correct |
6 |
Correct |
5 ms |
4460 KB |
Output is correct |
7 |
Correct |
6 ms |
4588 KB |
Output is correct |
8 |
Correct |
7 ms |
4588 KB |
Output is correct |
9 |
Correct |
5 ms |
4460 KB |
Output is correct |
10 |
Correct |
24 ms |
6124 KB |
Output is correct |
11 |
Correct |
3 ms |
4332 KB |
Output is correct |
12 |
Correct |
4 ms |
4332 KB |
Output is correct |
13 |
Correct |
4 ms |
4460 KB |
Output is correct |
14 |
Correct |
5 ms |
4460 KB |
Output is correct |
15 |
Correct |
4 ms |
4460 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
479 ms |
22508 KB |
Output is correct |
2 |
Correct |
461 ms |
21104 KB |
Output is correct |
3 |
Correct |
541 ms |
25308 KB |
Output is correct |
4 |
Correct |
441 ms |
23008 KB |
Output is correct |
5 |
Correct |
485 ms |
20852 KB |
Output is correct |
6 |
Correct |
448 ms |
22820 KB |
Output is correct |
7 |
Correct |
528 ms |
21000 KB |
Output is correct |
8 |
Correct |
508 ms |
21252 KB |
Output is correct |
9 |
Correct |
459 ms |
21876 KB |
Output is correct |
10 |
Correct |
428 ms |
21708 KB |
Output is correct |
11 |
Correct |
250 ms |
16620 KB |
Output is correct |
12 |
Correct |
507 ms |
21580 KB |
Output is correct |
13 |
Correct |
495 ms |
22996 KB |
Output is correct |
14 |
Correct |
505 ms |
23052 KB |
Output is correct |
15 |
Correct |
465 ms |
22492 KB |
Output is correct |
16 |
Correct |
478 ms |
22932 KB |
Output is correct |
17 |
Correct |
506 ms |
23124 KB |
Output is correct |
18 |
Correct |
526 ms |
24820 KB |
Output is correct |
19 |
Correct |
570 ms |
25048 KB |
Output is correct |
20 |
Correct |
490 ms |
22892 KB |
Output is correct |
21 |
Correct |
491 ms |
23120 KB |
Output is correct |
22 |
Correct |
512 ms |
22596 KB |
Output is correct |
23 |
Correct |
269 ms |
18028 KB |
Output is correct |
24 |
Correct |
542 ms |
25364 KB |
Output is correct |
25 |
Correct |
25 ms |
6124 KB |
Output is correct |
26 |
Correct |
4 ms |
4460 KB |
Output is correct |
27 |
Correct |
4 ms |
4460 KB |
Output is correct |
28 |
Correct |
44 ms |
7916 KB |
Output is correct |
29 |
Correct |
24 ms |
6124 KB |
Output is correct |
30 |
Correct |
5 ms |
4460 KB |
Output is correct |
31 |
Correct |
6 ms |
4588 KB |
Output is correct |
32 |
Correct |
7 ms |
4588 KB |
Output is correct |
33 |
Correct |
5 ms |
4460 KB |
Output is correct |
34 |
Correct |
24 ms |
6124 KB |
Output is correct |
35 |
Correct |
3 ms |
4332 KB |
Output is correct |
36 |
Correct |
4 ms |
4332 KB |
Output is correct |
37 |
Correct |
4 ms |
4460 KB |
Output is correct |
38 |
Correct |
5 ms |
4460 KB |
Output is correct |
39 |
Correct |
4 ms |
4460 KB |
Output is correct |
40 |
Correct |
441 ms |
22552 KB |
Output is correct |
41 |
Correct |
447 ms |
21628 KB |
Output is correct |
42 |
Correct |
444 ms |
21820 KB |
Output is correct |
43 |
Correct |
317 ms |
17260 KB |
Output is correct |
44 |
Correct |
323 ms |
17260 KB |
Output is correct |
45 |
Correct |
526 ms |
20792 KB |
Output is correct |
46 |
Correct |
517 ms |
20528 KB |
Output is correct |
47 |
Correct |
419 ms |
22736 KB |
Output is correct |
48 |
Correct |
293 ms |
14828 KB |
Output is correct |
49 |
Correct |
377 ms |
22168 KB |
Output is correct |
50 |
Correct |
499 ms |
20820 KB |
Output is correct |
51 |
Correct |
522 ms |
20884 KB |
Output is correct |