#include <bits/stdc++.h>
#define int long long
#define rep(i,j,k) for (int i=j; i<=k; i++)
#define de(x) cout << #x << "=" << x << ", "
#define dd cout << '\n';
#define ff first
#define ss second
#define pb push_back
#define lyx_my_wife ios::sync_with_stdio(0), cin.tie(0);
using namespace std;
typedef pair<int,int> pii;
const int N = 1e5+10, M = 2e5+10;
int n, m, s, t, u, v;
vector<pii> G[N];
int disu[N], disv[N], diss[N], dist[N], vis[N];
int dpu[N], dpv[N], ans;
void dijks(int rt, int dis[N], int fordp=0, int forans=0)
{
memset(dis, 0x3f, sizeof(disu));
memset(vis, 0, sizeof(vis));
priority_queue<pii, vector<pii>, greater<pii>> pq;
dis[rt] = 0;
pq.push({0, rt});
if (fordp)
{
memset(dpu, 0x3f, sizeof(dpu));
memset(dpv, 0x3f, sizeof(dpv));
}
while(pq.size())
{
int i = pq.top().ss, d = pq.top().ff;
pq.pop();
if (vis[i]) continue;
vis[i] = 1;
if (fordp)
{
dpu[i] = min(dpu[i], disu[i]);
dpv[i] = min(dpv[i], disv[i]);
}
for (auto e: G[i])
{
int j = e.ss, w = e.ff;
if (forans)
{
if (diss[j] != diss[i]-w) continue;
ans = min(ans, dpu[j]+disv[i]);
ans = min(ans, dpv[j]+disu[i]);
}
if (dis[j] > d+w)
{
dis[j] = d+w;
pq.push({dis[j], j});
if (fordp) dpu[j] = dpu[i], dpv[j] = dpv[i];
}
else if (dis[j] == d+w)
{
if (fordp) dpu[j] = min(dpu[j], dpu[i]), dpv[j] = min(dpv[j], dpv[i]);
}
}
}
}
signed main()
{
lyx_my_wife
cin >> n >> m >> s >> t >> u >> v;
rep(_,1,m)
{
int i, j, w;
cin >> i >> j >> w;
G[i].pb({w,j});
G[j].pb({w,i});
}
// dijks for disu, disv
dijks(u,disu);
dijks(v,disv);
dijks(s,diss,1);
ans = disu[v];
dijks(t,dist,0,1);
cout << ans << '\n';
}
/*
6 6
1 6
1 4
1 2 1
2 3 1
3 5 1
2 4 3
4 5 2
5 6 1
6 5
1 2
3 6
1 2 10
2 3 10
3 4 10
4 5 10
5 6 10
8 8
5 7
6 8
1 2 2
2 3 3
3 4 4
1 4 1
1 5 5
2 6 6
3 7 7
4 8 8
5 5
1 5
2 3
1 2 1
2 3 10
2 4 10
3 5 10
4 5 10
*/
/*
> 無向圖,選一條 s-t 最短路使其邊權歸零,使 u-v 路徑最短
將無向圖拆成有向圖,從 s 開始的最短路徑有一個 DAG as sDAG
s->t最短路也有 DAG 屬於 sDAG as stDAG
! stDAG 的任何一條 st 路徑都是合法的最短路
! stDAG inverse as tsDAG 的任何一條 ts 路徑都是合法的最短路
from u to v in stDAG
from v to u in stDAG
! u -> (x -> y)stDAG -> v
! sv -> (x -> y)stDAG -> u
! ans = min(dis[u][x] + dis[y][v])
! ans = min(dis[v][x] + dis[y][u])
! ans = min(dis[u][x] + dis[v][y])
! ans = min(dis[v][x] + dis[u][y])
+ dpu: on stDAG, min dis[u][x]
+ dpv: on stDAG, min dis[v][x]
+ ans = min(ans, dpu + disv[i])
+ ans = min(ans, dpv + disu[i])
*/
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
279 ms |
21984 KB |
Output is correct |
2 |
Correct |
243 ms |
20764 KB |
Output is correct |
3 |
Correct |
314 ms |
20356 KB |
Output is correct |
4 |
Correct |
230 ms |
21448 KB |
Output is correct |
5 |
Correct |
263 ms |
20400 KB |
Output is correct |
6 |
Correct |
255 ms |
21996 KB |
Output is correct |
7 |
Correct |
299 ms |
20588 KB |
Output is correct |
8 |
Correct |
278 ms |
20736 KB |
Output is correct |
9 |
Correct |
246 ms |
20532 KB |
Output is correct |
10 |
Correct |
222 ms |
20412 KB |
Output is correct |
11 |
Correct |
138 ms |
14416 KB |
Output is correct |
12 |
Correct |
290 ms |
20472 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
294 ms |
20840 KB |
Output is correct |
2 |
Correct |
291 ms |
20588 KB |
Output is correct |
3 |
Correct |
301 ms |
20640 KB |
Output is correct |
4 |
Correct |
277 ms |
20692 KB |
Output is correct |
5 |
Correct |
299 ms |
20676 KB |
Output is correct |
6 |
Correct |
288 ms |
20432 KB |
Output is correct |
7 |
Correct |
286 ms |
20564 KB |
Output is correct |
8 |
Correct |
299 ms |
20856 KB |
Output is correct |
9 |
Correct |
269 ms |
20608 KB |
Output is correct |
10 |
Correct |
289 ms |
20608 KB |
Output is correct |
11 |
Correct |
119 ms |
14352 KB |
Output is correct |
12 |
Correct |
296 ms |
20404 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
11 ms |
9820 KB |
Output is correct |
2 |
Correct |
4 ms |
8148 KB |
Output is correct |
3 |
Correct |
5 ms |
8156 KB |
Output is correct |
4 |
Correct |
19 ms |
11604 KB |
Output is correct |
5 |
Correct |
12 ms |
9812 KB |
Output is correct |
6 |
Correct |
5 ms |
8196 KB |
Output is correct |
7 |
Correct |
7 ms |
8328 KB |
Output is correct |
8 |
Correct |
6 ms |
8404 KB |
Output is correct |
9 |
Correct |
5 ms |
8276 KB |
Output is correct |
10 |
Correct |
11 ms |
9812 KB |
Output is correct |
11 |
Correct |
4 ms |
8056 KB |
Output is correct |
12 |
Correct |
4 ms |
8148 KB |
Output is correct |
13 |
Correct |
4 ms |
8148 KB |
Output is correct |
14 |
Correct |
4 ms |
8196 KB |
Output is correct |
15 |
Correct |
4 ms |
8148 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
279 ms |
21984 KB |
Output is correct |
2 |
Correct |
243 ms |
20764 KB |
Output is correct |
3 |
Correct |
314 ms |
20356 KB |
Output is correct |
4 |
Correct |
230 ms |
21448 KB |
Output is correct |
5 |
Correct |
263 ms |
20400 KB |
Output is correct |
6 |
Correct |
255 ms |
21996 KB |
Output is correct |
7 |
Correct |
299 ms |
20588 KB |
Output is correct |
8 |
Correct |
278 ms |
20736 KB |
Output is correct |
9 |
Correct |
246 ms |
20532 KB |
Output is correct |
10 |
Correct |
222 ms |
20412 KB |
Output is correct |
11 |
Correct |
138 ms |
14416 KB |
Output is correct |
12 |
Correct |
290 ms |
20472 KB |
Output is correct |
13 |
Correct |
294 ms |
20840 KB |
Output is correct |
14 |
Correct |
291 ms |
20588 KB |
Output is correct |
15 |
Correct |
301 ms |
20640 KB |
Output is correct |
16 |
Correct |
277 ms |
20692 KB |
Output is correct |
17 |
Correct |
299 ms |
20676 KB |
Output is correct |
18 |
Correct |
288 ms |
20432 KB |
Output is correct |
19 |
Correct |
286 ms |
20564 KB |
Output is correct |
20 |
Correct |
299 ms |
20856 KB |
Output is correct |
21 |
Correct |
269 ms |
20608 KB |
Output is correct |
22 |
Correct |
289 ms |
20608 KB |
Output is correct |
23 |
Correct |
119 ms |
14352 KB |
Output is correct |
24 |
Correct |
296 ms |
20404 KB |
Output is correct |
25 |
Correct |
11 ms |
9820 KB |
Output is correct |
26 |
Correct |
4 ms |
8148 KB |
Output is correct |
27 |
Correct |
5 ms |
8156 KB |
Output is correct |
28 |
Correct |
19 ms |
11604 KB |
Output is correct |
29 |
Correct |
12 ms |
9812 KB |
Output is correct |
30 |
Correct |
5 ms |
8196 KB |
Output is correct |
31 |
Correct |
7 ms |
8328 KB |
Output is correct |
32 |
Correct |
6 ms |
8404 KB |
Output is correct |
33 |
Correct |
5 ms |
8276 KB |
Output is correct |
34 |
Correct |
11 ms |
9812 KB |
Output is correct |
35 |
Correct |
4 ms |
8056 KB |
Output is correct |
36 |
Correct |
4 ms |
8148 KB |
Output is correct |
37 |
Correct |
4 ms |
8148 KB |
Output is correct |
38 |
Correct |
4 ms |
8196 KB |
Output is correct |
39 |
Correct |
4 ms |
8148 KB |
Output is correct |
40 |
Correct |
256 ms |
21580 KB |
Output is correct |
41 |
Correct |
254 ms |
20580 KB |
Output is correct |
42 |
Correct |
271 ms |
20796 KB |
Output is correct |
43 |
Correct |
118 ms |
14408 KB |
Output is correct |
44 |
Correct |
128 ms |
14384 KB |
Output is correct |
45 |
Correct |
266 ms |
21068 KB |
Output is correct |
46 |
Correct |
277 ms |
20976 KB |
Output is correct |
47 |
Correct |
237 ms |
21256 KB |
Output is correct |
48 |
Correct |
138 ms |
14352 KB |
Output is correct |
49 |
Correct |
239 ms |
21412 KB |
Output is correct |
50 |
Correct |
265 ms |
20424 KB |
Output is correct |
51 |
Correct |
308 ms |
21136 KB |
Output is correct |