#include <bits/stdc++.h>
#define int long long
#define bp __builtin_popcountll
#define pb push_back
#define in(s) freopen(s, "r", stdin);
#define out(s) freopen(s, "w", stdout);
#define inout(s, end1, end2) freopen((string(s) + "." + end1).c_str(), "r", stdin),\
freopen((string(s) + "." + end2).c_str(), "w", stdout);
#define fi first
#define se second
#define bw(i, r, l) for (int i = r - 1; i >= l; i--)
#define fw(i, l, r) for (int i = l; i < r; i++)
#define fa(i, x) for (auto i: x)
using namespace std;
typedef pair<int, int> ii;
const int mod = 1e9 + 7, inf = 1061109567;
const long long infll = 4557430888798830399;
const int N = 1e5 + 5;
struct DPState {
int stCost = infll, uvCost = infll;
DPState(int stCost = infll, int uvCost = infll): stCost(stCost), uvCost(uvCost) {};
bool operator<(const DPState &rhs) const {
if (stCost == rhs.stCost) return uvCost < rhs.uvCost;
return stCost < rhs.stCost;
}
bool operator!=(const DPState &rhs) const {
if (stCost != rhs.stCost || uvCost != rhs.uvCost) return true;
return false;
}
} dp[N][3];
typedef pair<DPState, ii> iii;
int n, m, s, t, u, v, ans;
vector<ii> g[N];
int distu[N], distv[N];
void djisktra(int src, int (&dist)[N]) {
memset(dist, 63, sizeof dist);
dist[src] = 0;
priority_queue<ii, vector<ii>, greater<ii>> pq;
pq.push(ii(0, src));
while (!pq.empty()) {
ii tmp = pq.top(); pq.pop();
int vertex = tmp.se, cost = tmp.fi;
if (dist[vertex] != cost) continue;
fa (i, g[vertex]) {
int dest = i.fi, edgeCost = i.se;
if (cost + edgeCost < dist[dest]) {
dist[dest] = cost + edgeCost;
pq.push(ii(dist[dest], dest));
}
}
}
}
void solve() {
fw (i, 0, n) fw (j, 0, 3) dp[i][j] = DPState();
djisktra(u, distu);
djisktra(v, distv);
priority_queue<iii, vector<iii>, greater<iii>> pq;
pq.push(iii(DPState(0, 0), ii(s, 0)));
dp[s][0] = DPState(0, 0);
while (!pq.empty()) {
iii tmp = pq.top(); pq.pop();
int state = tmp.se.se, vertex = tmp.se.fi;
DPState cost = tmp.fi;
if (cost != dp[vertex][state]) continue;
//Change vertexes or change state
//Change vertex:
fa (i, g[vertex]) {
int dest = i.fi, edgeCost = i.se;
if (DPState(cost.stCost + edgeCost, cost.uvCost) < dp[dest][state]) {
dp[dest][state] = DPState(cost.stCost + edgeCost, cost.uvCost);
pq.push(iii(dp[dest][state], ii(dest, state)));
}
}
//Change state
if (state == 0) {
if (DPState(cost.stCost, cost.uvCost + distu[vertex]) < dp[vertex][1]) {
dp[vertex][1] = DPState(cost.stCost, cost.uvCost + distu[vertex]);
pq.push(iii(dp[vertex][1], ii(vertex, 1)));
}
} else if (state == 1) {
if (DPState(cost.stCost, cost.uvCost + distv[vertex]) < dp[vertex][2]) {
dp[vertex][2] = DPState(cost.stCost, cost.uvCost + distv[vertex]);
pq.push(iii(dp[vertex][2], ii(vertex, 2)));
}
}
}
ans = min(ans, dp[t][2].uvCost);
ans = min(ans, distu[v]);
// fw (i, 0, n) fw (j, 0, 3) cout << "dp[" << i << "][" << j << "] = " << dp[i][j].stCost << " " << dp[i][j].uvCost << "\n";
}
signed main() {
#ifdef BLU
in("blu.inp");
#endif
ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
cin >> n >> m >> s >> t >> u >> v;
s--, t--, u--, v--;
fw (i, 0, m) {
int v1, v2, cost;
cin >> v1 >> v2 >> cost;
v1--, v2--;
g[v1].pb(ii(v2, cost));
g[v2].pb(ii(v1, cost));
}
ans = infll;
solve();
//Swap u v and do the same thing
swap(u, v);
solve();
cout << ans;
return 0;
}
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
802 ms |
38224 KB |
Output is correct |
2 |
Correct |
839 ms |
36948 KB |
Output is correct |
3 |
Correct |
891 ms |
30940 KB |
Output is correct |
4 |
Correct |
802 ms |
37388 KB |
Output is correct |
5 |
Correct |
831 ms |
35680 KB |
Output is correct |
6 |
Correct |
844 ms |
38788 KB |
Output is correct |
7 |
Correct |
855 ms |
36676 KB |
Output is correct |
8 |
Correct |
838 ms |
36948 KB |
Output is correct |
9 |
Correct |
887 ms |
36500 KB |
Output is correct |
10 |
Correct |
671 ms |
31900 KB |
Output is correct |
11 |
Correct |
289 ms |
16248 KB |
Output is correct |
12 |
Correct |
840 ms |
36664 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
937 ms |
37484 KB |
Output is correct |
2 |
Correct |
887 ms |
36120 KB |
Output is correct |
3 |
Correct |
924 ms |
36300 KB |
Output is correct |
4 |
Correct |
904 ms |
36264 KB |
Output is correct |
5 |
Correct |
899 ms |
36272 KB |
Output is correct |
6 |
Correct |
791 ms |
31036 KB |
Output is correct |
7 |
Correct |
961 ms |
36172 KB |
Output is correct |
8 |
Correct |
899 ms |
36276 KB |
Output is correct |
9 |
Correct |
876 ms |
36080 KB |
Output is correct |
10 |
Correct |
877 ms |
36232 KB |
Output is correct |
11 |
Correct |
263 ms |
16348 KB |
Output is correct |
12 |
Correct |
792 ms |
31068 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
29 ms |
11504 KB |
Output is correct |
2 |
Correct |
11 ms |
9080 KB |
Output is correct |
3 |
Correct |
10 ms |
9080 KB |
Output is correct |
4 |
Correct |
42 ms |
13312 KB |
Output is correct |
5 |
Correct |
21 ms |
10872 KB |
Output is correct |
6 |
Correct |
11 ms |
9080 KB |
Output is correct |
7 |
Correct |
12 ms |
9212 KB |
Output is correct |
8 |
Correct |
13 ms |
9228 KB |
Output is correct |
9 |
Correct |
11 ms |
9080 KB |
Output is correct |
10 |
Correct |
20 ms |
10616 KB |
Output is correct |
11 |
Correct |
10 ms |
8952 KB |
Output is correct |
12 |
Correct |
11 ms |
8952 KB |
Output is correct |
13 |
Correct |
10 ms |
9080 KB |
Output is correct |
14 |
Correct |
10 ms |
9080 KB |
Output is correct |
15 |
Correct |
11 ms |
9052 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
802 ms |
38224 KB |
Output is correct |
2 |
Correct |
839 ms |
36948 KB |
Output is correct |
3 |
Correct |
891 ms |
30940 KB |
Output is correct |
4 |
Correct |
802 ms |
37388 KB |
Output is correct |
5 |
Correct |
831 ms |
35680 KB |
Output is correct |
6 |
Correct |
844 ms |
38788 KB |
Output is correct |
7 |
Correct |
855 ms |
36676 KB |
Output is correct |
8 |
Correct |
838 ms |
36948 KB |
Output is correct |
9 |
Correct |
887 ms |
36500 KB |
Output is correct |
10 |
Correct |
671 ms |
31900 KB |
Output is correct |
11 |
Correct |
289 ms |
16248 KB |
Output is correct |
12 |
Correct |
840 ms |
36664 KB |
Output is correct |
13 |
Correct |
937 ms |
37484 KB |
Output is correct |
14 |
Correct |
887 ms |
36120 KB |
Output is correct |
15 |
Correct |
924 ms |
36300 KB |
Output is correct |
16 |
Correct |
904 ms |
36264 KB |
Output is correct |
17 |
Correct |
899 ms |
36272 KB |
Output is correct |
18 |
Correct |
791 ms |
31036 KB |
Output is correct |
19 |
Correct |
961 ms |
36172 KB |
Output is correct |
20 |
Correct |
899 ms |
36276 KB |
Output is correct |
21 |
Correct |
876 ms |
36080 KB |
Output is correct |
22 |
Correct |
877 ms |
36232 KB |
Output is correct |
23 |
Correct |
263 ms |
16348 KB |
Output is correct |
24 |
Correct |
792 ms |
31068 KB |
Output is correct |
25 |
Correct |
29 ms |
11504 KB |
Output is correct |
26 |
Correct |
11 ms |
9080 KB |
Output is correct |
27 |
Correct |
10 ms |
9080 KB |
Output is correct |
28 |
Correct |
42 ms |
13312 KB |
Output is correct |
29 |
Correct |
21 ms |
10872 KB |
Output is correct |
30 |
Correct |
11 ms |
9080 KB |
Output is correct |
31 |
Correct |
12 ms |
9212 KB |
Output is correct |
32 |
Correct |
13 ms |
9228 KB |
Output is correct |
33 |
Correct |
11 ms |
9080 KB |
Output is correct |
34 |
Correct |
20 ms |
10616 KB |
Output is correct |
35 |
Correct |
10 ms |
8952 KB |
Output is correct |
36 |
Correct |
11 ms |
8952 KB |
Output is correct |
37 |
Correct |
10 ms |
9080 KB |
Output is correct |
38 |
Correct |
10 ms |
9080 KB |
Output is correct |
39 |
Correct |
11 ms |
9052 KB |
Output is correct |
40 |
Correct |
809 ms |
48548 KB |
Output is correct |
41 |
Correct |
787 ms |
37012 KB |
Output is correct |
42 |
Correct |
825 ms |
36928 KB |
Output is correct |
43 |
Correct |
333 ms |
16508 KB |
Output is correct |
44 |
Correct |
260 ms |
16252 KB |
Output is correct |
45 |
Correct |
717 ms |
30396 KB |
Output is correct |
46 |
Correct |
766 ms |
30464 KB |
Output is correct |
47 |
Correct |
778 ms |
37100 KB |
Output is correct |
48 |
Correct |
322 ms |
15872 KB |
Output is correct |
49 |
Correct |
717 ms |
48208 KB |
Output is correct |
50 |
Correct |
725 ms |
30964 KB |
Output is correct |
51 |
Correct |
632 ms |
30164 KB |
Output is correct |