This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
 
#define fo(i,s,t) for(int i = s; i <= t; ++ i)
#define fd(i,s,t) for(int i = s; i >= t; -- i)
#define bf(i,s) for(int i = head[s]; i; i = e[i].next)
#define mp make_pair
#define fi first
#define se second
#define pii pair<long long,int>
#define pb push_back
#define VI vector<int>
#define sf scanf
#define pf printf
#define fp freopen
#define SZ(x) ((int)(x).size())
#ifdef MPS
#define D(x...) printf(x)
#else
#define D(x...)
#endif
typedef long long ll;
typedef double db;
typedef unsigned long long ull;
const int inf = 1<<30;
const ll INF = 1000000000000000ll;
const db Inf = 1e20;
const db eps = 1e-9;
 
void gmax(int &a,int b){a = (a > b ? a : b);}
void gmin(int &a,int b){a = (a < b ? a : b);}
 
const int maxn = 100050;
 
int n, m, s, t, u, v, head[maxn], tot, pre[maxn];
struct edge{int next, to, w;}e[maxn<<2];
ll dist[maxn];
bool inq[maxn];
priority_queue<pii,vector<pii>,greater<pii> > pq;
 
inline void add_edge(int u, int v, int w)
{
	e[tot] = (struct edge){head[u], v, w}; head[u] = tot++;
	e[tot] = (struct edge){head[v], u, w}; head[v] = tot++;
}
inline ll dijkstra(int s, int t)
{
	pq.push(mp(0ll, s));
	fo(i,1,n) dist[i] = INF;
	dist[s] = 0;
	while(!pq.empty())
	{
		int h = pq.top().se; pq.pop(); inq[h] = false;
		for(int i = head[h]; i != -1; i = e[i].next)
		{
			int v = e[i].to; 
			if(dist[v] > dist[h] + e[i].w)
			{
				dist[v] = dist[h] + e[i].w;
				pre[v] = i;
				if(!inq[v]) inq[v] = true, pq.push(mp(dist[v], v));
			}
		}
	}
	return dist[t];
}
inline void back_track(int t)
{
	if(t == s) return;
	e[pre[t]].w = 0;
	back_track(e[pre[t]^1].to);
}
void read(int &x)
{
	x = 0; char c = '.';
	while(c < '0' || c > '9') c = getchar();
	while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
}
int main()
{
	#ifdef MPS
		fp("1.in","r",stdin);
		fp("1.out","w",stdout);
	#endif
	read(n); read(m);
	read(s); read(t); read(u); read(v);
	memset(head, -1, sizeof(head));
	fo(i,1,m)
	{
		int u, v, w;
		read(u); read(v); read(w);
		add_edge(u, v, w);
	}
	dijkstra(s, t);
	back_track(t);
	pf("%lld\n",dijkstra(u, v));
	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... |