제출 #1175084

#제출 시각아이디문제언어결과실행 시간메모리
1175084duonggsimpCommuter Pass (JOI18_commuter_pass)C++20
31 / 100
196 ms41236 KiB
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair <ll,ll> ii;
typedef pair <ii,ll> iii;
#define pb push_back
#define fi first
#define se second
#define endl '\n'
#define MOD 1000000007
const int N = 2e6;

ll n,m;
ll s,t,u,v;
ll ds[1000005];
ll dt[1000005];
ll du[1000005];
ll dv[1000005];
vector <ii> a[1000005];
priority_queue <ii,vector<ii>,greater<ii>> q;

void ditcha(ll d[],ll x){

  for (long i=1; i<=n; i++) d[i] = 1e15;
  d[x] = 0;
  q.push({0,x});

  while (!q.empty()){

    ii t = q.top(); q.pop();
    if (t.fi != d[t.se]) continue;

    for (ii i : a[t.se]){
      if (d[i.fi] > d[t.se] + i.se){
        d[i.fi] = d[t.se] + i.se;
        q.push({d[i.fi],i.fi});
      }
    }
  }
}

signed main(){

  ios_base::sync_with_stdio(0);
  cin.tie(0);cout.tie(0);

  cin >> n >> m;
  cin >> s >> t;
  cin >> u >> v;

  for (long i=1; i<=m; i++){
    ll u,v,w; cin >> u >> v >> w;
    a[u].pb({v,w});
    a[v].pb({u,w});
  }

  ditcha(ds,s);
  ditcha(dt,t);

  for (long i=1; i<=n; i++){
    for (ii it : a[i]){
      if (ds[i] + dt[it.fi] + it.se == ds[t]) a[i].pb({it.fi,0});
    }
  }

  ditcha(du,u);
  ditcha(dv,v);

  cout << min(du[v],dv[u]);
  return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...