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>
#define mp make_pair
#define pb push_back
#define F first
#define S second
#define all(x) x.begin(),x.end()
#define MAXN 100005
typedef long long ll;
using namespace std;
ll n,m,a,b,x,y;
vector<pair<ll,ll> > niz[MAXN];
vector<ll > preci[MAXN];
set<pair<ll,ll> > q;
ll oda[MAXN],odb[MAXN],odx[MAXN],ody[MAXN],dece[MAXN];
vector<ll> nzm;
ll dpx[MAXN],dpy[MAXN];
ll res;
void dijkstra(ll s,ll *gde){
q.clear();
q.insert(mp(0,s));
while(!q.empty()){
ll tu=q.begin()->first;
ll t=q.begin()->second;
q.erase(q.begin());
if(gde[t] && t!=s){
continue;
}
gde[t]=tu;
for(auto x:niz[t]){
if(!gde[x.first] && x.first!=s){
q.insert(mp(tu+x.second,x.first));
}
}
}
}
int main()///SVE U LONG LONG
{
scanf("%lld %lld", &n, &m);
scanf("%lld %lld", &a, &b);
scanf("%lld %lld", &x, &y);
for(ll i=1;i<=m;i++){
ll t1,t2,t3;
scanf("%lld %lld %lld", &t1, &t2, &t3);
niz[t1].pb(mp(t2,t3));
niz[t2].pb(mp(t1,t3));
}
dijkstra(a,oda);
dijkstra(b,odb);
dijkstra(x,odx);
dijkstra(y,ody);
res=odx[y];
for(ll i=1;i<=n;i++){
if(!(oda[i]+odb[i]== oda[b]))continue;
dpx[i]=odx[i];
dpy[i]=ody[i];
for(auto x:niz[i]){
if(x.second+odb[x.first]+oda[i]==oda[b]){
dece[i]++;
preci[x.first].pb(i);
}
}
if(!dece[i])nzm.pb(i);//samo b lol
}
while(!nzm.empty()){
ll t=nzm.back();
nzm.pop_back();
res = min(res,min(dpx[t]+ody[t],dpy[t]+odx[t]));
//printf(" %d %d %d %d %d\n",t,dpx[t],odx[t],dpy[t],ody[t]);
for(auto x:preci[t]){
dece[x]--;
if(!dece[x])nzm.pb(x);
dpx[x]=min(dpx[x],dpx[t]);
dpy[x]=min(dpy[x],dpy[t]);
}
}
printf("%lld",res);
return 0;
}
Compilation message (stderr)
commuter_pass.cpp: In function 'int main()':
commuter_pass.cpp:46:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%lld %lld", &n, &m);
~~~~~^~~~~~~~~~~~~~~~~~~~~
commuter_pass.cpp:47:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%lld %lld", &a, &b);
~~~~~^~~~~~~~~~~~~~~~~~~~~
commuter_pass.cpp:48:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%lld %lld", &x, &y);
~~~~~^~~~~~~~~~~~~~~~~~~~~
commuter_pass.cpp:51:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%lld %lld %lld", &t1, &t2, &t3);
~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# | 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... |