#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
struct Arete
{
ll v, c;
};
struct Situation
{
ll u, dis;
bool operator<(Situation other) const
{
return (dis > other.dis or (dis == other.dis and u > other.u));
}
};
const int MAXN = 1e5;
const ll INF = 1e18;
const int U = 0;
const int V = 1;
const int S = 2;
const int T = 3;
vector<Arete> G[MAXN];
ll dis[4][MAXN];
ll uv_from_st[4][4][MAXN];
ll u_from_s[MAXN], v_from_s[MAXN], u_from_t[MAXN];
int special_nodes[4];
int nb_noeuds, nb_aretes;
int u, v, s, t;
void read_input(void)
{
cin >> nb_noeuds >> nb_aretes;
cin >> s >> t;
cin >> u >> v;
s--, t--, u--, v--;
special_nodes[U] = u, special_nodes[V] = v, special_nodes[S]=s, special_nodes[T]=t;
for (int i(0); i < nb_aretes; ++i)
{
int a, b;
ll c;
cin >> a >> b >> c;
G[a-1].push_back({b-1, c});
G[b-1].push_back({a-1, c});
}
}
void run_dis(int from)
{
for (int i(0); i < nb_noeuds; ++i)
dis[from][i] = INF;
dis[from][special_nodes[from]] = 0;
priority_queue<Situation> Q;
Q.push({special_nodes[from], 0});
while (!Q.empty())
{
auto node = Q.top();
Q.pop();
int x = node.u;
ll d = node.dis;
if (d > dis[from][x])
continue;
for (auto e : G[x])
if (d + e.c < dis[from][e.v])
{
dis[from][e.v] = d+e.c;
Q.push({e.v, d+e.c});
}
}
}
void run_weird_dis(int from, int to)
{
for (int i(0); i < nb_noeuds; ++i)
uv_from_st[from][to][i] = INF;
uv_from_st[from][to][special_nodes[from]] = dis[from][special_nodes[to]];
priority_queue<Situation> Q;
Q.push({special_nodes[from], uv_from_st[from][to][special_nodes[from]]});
while (!Q.empty())
{
auto node = Q.top();
Q.pop();
int x = node.u;
ll d = node.dis;
if (uv_from_st[from][to][x] < d)
continue ;
for (auto e : G[x])
if (dis[from][e.v] == dis[from][x] + e.c && uv_from_st[from][to][e.v] > uv_from_st[from][to][x])
{
uv_from_st[from][to][e.v] = min(uv_from_st[from][to][x], dis[to][e.v]);
Q.push({e.v, uv_from_st[from][to][e.v]});
}
}
}
int main(void)
{
ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
read_input();
for (int i(0); i < 4; ++i)
run_dis(i);
for (int from(2); from < 4; ++from)
for (int to(0); to < 2; ++to)
run_weird_dis(from, to);
ll shortest = dis[U][v];
for (int x(0); x < nb_noeuds; ++x)
{
if (dis[S][x] + dis[T][x] == dis[S][t])
{
shortest = min(shortest, min(uv_from_st[S][U][x] + dis[V][x], uv_from_st[T][V][x] + dis[U][x]));
shortest = min(shortest, min(uv_from_st[S][V][x] + dis[U][x], uv_from_st[T][U][x] + dis[V][x]));
}
}
cout << shortest << endl;
}
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
568 ms |
23676 KB |
Output is correct |
2 |
Correct |
635 ms |
23140 KB |
Output is correct |
3 |
Correct |
508 ms |
23324 KB |
Output is correct |
4 |
Correct |
593 ms |
25348 KB |
Output is correct |
5 |
Correct |
578 ms |
22828 KB |
Output is correct |
6 |
Correct |
633 ms |
23328 KB |
Output is correct |
7 |
Correct |
598 ms |
23004 KB |
Output is correct |
8 |
Correct |
529 ms |
22904 KB |
Output is correct |
9 |
Correct |
516 ms |
23852 KB |
Output is correct |
10 |
Correct |
510 ms |
24084 KB |
Output is correct |
11 |
Correct |
260 ms |
16220 KB |
Output is correct |
12 |
Correct |
541 ms |
23780 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
514 ms |
23860 KB |
Output is correct |
2 |
Correct |
526 ms |
23644 KB |
Output is correct |
3 |
Correct |
534 ms |
23684 KB |
Output is correct |
4 |
Correct |
551 ms |
23472 KB |
Output is correct |
5 |
Correct |
549 ms |
23716 KB |
Output is correct |
6 |
Correct |
501 ms |
23112 KB |
Output is correct |
7 |
Correct |
557 ms |
22996 KB |
Output is correct |
8 |
Correct |
576 ms |
23732 KB |
Output is correct |
9 |
Correct |
535 ms |
23368 KB |
Output is correct |
10 |
Correct |
547 ms |
23264 KB |
Output is correct |
11 |
Correct |
191 ms |
16284 KB |
Output is correct |
12 |
Correct |
460 ms |
23224 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
16 ms |
4472 KB |
Output is correct |
2 |
Correct |
7 ms |
2808 KB |
Output is correct |
3 |
Correct |
5 ms |
2776 KB |
Output is correct |
4 |
Correct |
27 ms |
6184 KB |
Output is correct |
5 |
Correct |
15 ms |
4472 KB |
Output is correct |
6 |
Correct |
6 ms |
2808 KB |
Output is correct |
7 |
Correct |
7 ms |
2940 KB |
Output is correct |
8 |
Correct |
7 ms |
3064 KB |
Output is correct |
9 |
Correct |
6 ms |
2808 KB |
Output is correct |
10 |
Correct |
16 ms |
4472 KB |
Output is correct |
11 |
Correct |
5 ms |
2808 KB |
Output is correct |
12 |
Correct |
5 ms |
2808 KB |
Output is correct |
13 |
Correct |
6 ms |
2808 KB |
Output is correct |
14 |
Correct |
5 ms |
2808 KB |
Output is correct |
15 |
Correct |
6 ms |
2808 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
568 ms |
23676 KB |
Output is correct |
2 |
Correct |
635 ms |
23140 KB |
Output is correct |
3 |
Correct |
508 ms |
23324 KB |
Output is correct |
4 |
Correct |
593 ms |
25348 KB |
Output is correct |
5 |
Correct |
578 ms |
22828 KB |
Output is correct |
6 |
Correct |
633 ms |
23328 KB |
Output is correct |
7 |
Correct |
598 ms |
23004 KB |
Output is correct |
8 |
Correct |
529 ms |
22904 KB |
Output is correct |
9 |
Correct |
516 ms |
23852 KB |
Output is correct |
10 |
Correct |
510 ms |
24084 KB |
Output is correct |
11 |
Correct |
260 ms |
16220 KB |
Output is correct |
12 |
Correct |
541 ms |
23780 KB |
Output is correct |
13 |
Correct |
514 ms |
23860 KB |
Output is correct |
14 |
Correct |
526 ms |
23644 KB |
Output is correct |
15 |
Correct |
534 ms |
23684 KB |
Output is correct |
16 |
Correct |
551 ms |
23472 KB |
Output is correct |
17 |
Correct |
549 ms |
23716 KB |
Output is correct |
18 |
Correct |
501 ms |
23112 KB |
Output is correct |
19 |
Correct |
557 ms |
22996 KB |
Output is correct |
20 |
Correct |
576 ms |
23732 KB |
Output is correct |
21 |
Correct |
535 ms |
23368 KB |
Output is correct |
22 |
Correct |
547 ms |
23264 KB |
Output is correct |
23 |
Correct |
191 ms |
16284 KB |
Output is correct |
24 |
Correct |
460 ms |
23224 KB |
Output is correct |
25 |
Correct |
16 ms |
4472 KB |
Output is correct |
26 |
Correct |
7 ms |
2808 KB |
Output is correct |
27 |
Correct |
5 ms |
2776 KB |
Output is correct |
28 |
Correct |
27 ms |
6184 KB |
Output is correct |
29 |
Correct |
15 ms |
4472 KB |
Output is correct |
30 |
Correct |
6 ms |
2808 KB |
Output is correct |
31 |
Correct |
7 ms |
2940 KB |
Output is correct |
32 |
Correct |
7 ms |
3064 KB |
Output is correct |
33 |
Correct |
6 ms |
2808 KB |
Output is correct |
34 |
Correct |
16 ms |
4472 KB |
Output is correct |
35 |
Correct |
5 ms |
2808 KB |
Output is correct |
36 |
Correct |
5 ms |
2808 KB |
Output is correct |
37 |
Correct |
6 ms |
2808 KB |
Output is correct |
38 |
Correct |
5 ms |
2808 KB |
Output is correct |
39 |
Correct |
6 ms |
2808 KB |
Output is correct |
40 |
Correct |
500 ms |
25816 KB |
Output is correct |
41 |
Correct |
542 ms |
23692 KB |
Output is correct |
42 |
Correct |
535 ms |
23900 KB |
Output is correct |
43 |
Correct |
213 ms |
16376 KB |
Output is correct |
44 |
Correct |
298 ms |
16376 KB |
Output is correct |
45 |
Correct |
569 ms |
23028 KB |
Output is correct |
46 |
Correct |
585 ms |
22732 KB |
Output is correct |
47 |
Correct |
526 ms |
23324 KB |
Output is correct |
48 |
Correct |
189 ms |
15736 KB |
Output is correct |
49 |
Correct |
440 ms |
25908 KB |
Output is correct |
50 |
Correct |
928 ms |
22956 KB |
Output is correct |
51 |
Correct |
458 ms |
22948 KB |
Output is correct |