#include<bits/stdc++.h>
using namespace std;
using i64 = long long;
struct Data{
int v,w,i;
Data() {};
Data(int _v,int _w,int _i) {
v = _v;
w = _w;
i = _i;
}
};
int main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int n,m;
cin >> n >> m;
int s,t;
cin >> s >> t;
int u,v;
cin >> u >> v;
s --;
t --;
u --;
v --;
vector<vector<Data>> adj(n);
for(int i = 0;i < m;i++){
int a,b,w;
cin >> a >> b >> w;
a --;
b --;
adj[a].push_back(Data(b,w,i));
adj[b].push_back(Data(a,w,i));
}
const i64 inf = 1e18;
vector<pair<int,int>> par(n,pair<int,int>{-1,-1});
vector<i64> dist(n,inf);
priority_queue<pair<i64,int>,vector<pair<i64,int>>,greater<pair<i64,int>>> pq;
pq.push({0LL,s});
dist[s] = 0;
par[s] = {s,-1};
while(!pq.empty()){
auto p = pq.top();
pq.pop();
int a = p.second;
i64 c = p.first;
for(auto pp : adj[a]){
int vv = pp.v;
int w = pp.w;
if(dist[vv] > w + c){
dist[vv] = w + c;
pq.push({w + c,vv});
par[vv] = {a,pp.i};
}
}
}
vector<bool> is(m,false);
int cur = t;
while(true){
auto p = par[cur];
is[p.second] = true;
if(p.first == s) break;
cur = p.first;
}
for(int i = 0;i < n;i++){
for(Data &d : adj[i]){
if(is[d.i]) d.w = 0;
}
}
dist = vector<i64>(n,inf);
dist[u] = 0;
pq.push({0LL,u});
while(!pq.empty()){
auto p = pq.top();
pq.pop();
int a = p.second;
i64 c = p.first;
for(auto pp : adj[a]){
int vv = pp.v;
int w = pp.w;
if(dist[vv] > w + c){
dist[vv] = w + c;
pq.push({w + c,vv});
}
}
}
cout << dist[v] << '\n';
return 0;
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |