#pragma GCC optimize ("O3")
#pragma GCC target ("sse4")
#pragma GCC optimize ("unroll-loops")
#pragma GCC target ("avx2")
#include <bits/stdc++.h>
using namespace std;
typedef long long lo;
typedef pair< lo,lo > PII;
typedef pair< lo,PII > PIII;
typedef pair< lo,PIII > PIIII;
typedef pair< lo,PIIII > PIIIII;
#define fi first
#define se second
#define mp make_pair
#define int long long
#define endl "\n"
#define pb push_back
#define fio() ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL)
#define FOR for(int i=1;i<=n;i++)
#define mid ((start+end)/2)
#define ort ((bas+son)/2)
const lo inf = 1000000000000000000;
const lo KOK = 100000;
const lo LOG = 30;
const lo li = 500005;
const lo mod = 1000000007;
int n,m,b[li],a[li],k,flag,t,u,v,s,visit[li],d[li],vis[li],deg[li],cost[li],cost1[li],mini[li],mini1[li],ans=inf;
int cev;
vector<PII> vec[li];
inline void sp(){
priority_queue<PII> pq;
pq.push({0,t});
while(pq.size()){
int node=pq.top().se;
int co=-pq.top().fi;
pq.pop();
if(vis[node])continue;
vis[node]=1;
d[node]=co;
for(int i=0;i<(int)vec[node].size();i++){
int go=vec[node][i].fi;
int ind=vec[node][i].se;
pq.push({-co-a[ind],go});
}
}
//~ cout<<d[s]<<endl;
memset(vis,0,sizeof(vis));
pq.push({0,s});
while(pq.size()){
int node=pq.top().se;
int co=-pq.top().fi;
pq.pop();
if(vis[node])continue;
vis[node]=1;
deg[node]=co;
for(int i=0;i<(int)vec[node].size();i++){
int go=vec[node][i].fi;
int ind=vec[node][i].se;
//~ cout<<go<<" : : "<<co<<" : : "<<d[go]<<" : : "<<a[ind]<<endl;
if(d[go]+co+a[ind]==d[s])visit[ind]=1;
pq.push({-co-a[ind],go});
}
}
memset(vis,0,sizeof(vis));
pq.push({0,u});
while(pq.size()){
int node=pq.top().se;
int co=-pq.top().fi;
pq.pop();
if(vis[node])continue;
vis[node]=1;
cost[node]=co;
for(int i=0;i<(int)vec[node].size();i++){
int go=vec[node][i].fi;
int ind=vec[node][i].se;
//~ cout<<go<<" : : "<<co<<" : : "<<d[go]<<" : : "<<a[ind]<<endl;
if(d[go]+co+a[ind]==d[s])visit[ind]=1;
pq.push({-co-a[ind],go});
}
}
memset(vis,0,sizeof(vis));
pq.push({0,v});
while(pq.size()){
int node=pq.top().se;
int co=-pq.top().fi;
pq.pop();
if(vis[node])continue;
vis[node]=1;
cost1[node]=co;
for(int i=0;i<(int)vec[node].size();i++){
int go=vec[node][i].fi;
int ind=vec[node][i].se;
//~ cout<<go<<" : : "<<co<<" : : "<<d[go]<<" : : "<<a[ind]<<endl;
if(d[go]+co+a[ind]==d[s])visit[ind]=1;
pq.push({-co-a[ind],go});
}
}
priority_queue<PIIIII> pq1;
memset(vis,0,sizeof(vis));
pq1.push({0,{-cost[s]-cost1[s],{-cost[s],{-cost1[s],s}}}});
while(pq1.size()){
//~ int node=pq1.top().se.se;
int node=pq1.top().se.se.se.se;
int co2=-pq1.top().se.se.se.fi;
int co1=-pq1.top().se.se.fi;
int cooo=-pq1.top().se.fi;
int co=-pq1.top().fi;
pq1.pop();
if(vis[node])continue;
vis[node]=1;
ans=min(ans,co1+co2);
for(int i=0;i<(int)vec[node].size();i++){
int go=vec[node][i].fi;
int ind=vec[node][i].se;
if(d[go]+co+a[ind]==d[s] && deg[node]+d[go]+a[ind]==deg[t]){
pq1.push({-co-a[ind],{-min(co1,cost[go])-min(co2,cost1[go]),{-min(co1,cost[go]),{-min(co2,cost1[go]),go}}}});
}
}
}
}
main(void){
scanf("%lld %lld",&n,&m);
scanf("%lld %lld",&s,&t);
scanf("%lld %lld",&u,&v);
FOR mini[i]=inf;
FOR mini1[i]=inf;
for(int i=1;i<=m;i++){
int x,y;
scanf("%lld %lld %lld",&x,&y,&a[i]);
vec[x].pb({y,i});
vec[y].pb({x,i});
}
sp();
//~ int ans=inf;
//~ FOR{
//~ ans=min(ans,mini[i]+mini1[i]);
//~ ////~ cout<<mini[i]+mini1[i]<<" : : "<<mini[i]<<" : : "<<mini1[i]<<endl;
//~ }
ans=min(ans,cost[v]);
printf("%lld\n",ans);
return 0;
}
Compilation message
commuter_pass.cpp: In function 'void sp()':
commuter_pass.cpp:113:7: warning: unused variable 'cooo' [-Wunused-variable]
int cooo=-pq1.top().se.fi;
^~~~
commuter_pass.cpp: At global scope:
commuter_pass.cpp:130:10: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
main(void){
^
commuter_pass.cpp: In function 'int main()':
commuter_pass.cpp:131:7: 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:132:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%lld %lld",&s,&t);
~~~~~^~~~~~~~~~~~~~~~~~~
commuter_pass.cpp:133:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%lld %lld",&u,&v);
~~~~~^~~~~~~~~~~~~~~~~~~
commuter_pass.cpp:138:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%lld %lld %lld",&x,&y,&a[i]);
~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
726 ms |
35556 KB |
Output is correct |
2 |
Correct |
725 ms |
36704 KB |
Output is correct |
3 |
Correct |
750 ms |
36832 KB |
Output is correct |
4 |
Correct |
728 ms |
35036 KB |
Output is correct |
5 |
Correct |
725 ms |
36836 KB |
Output is correct |
6 |
Correct |
682 ms |
35420 KB |
Output is correct |
7 |
Correct |
790 ms |
36956 KB |
Output is correct |
8 |
Correct |
761 ms |
36960 KB |
Output is correct |
9 |
Correct |
665 ms |
35504 KB |
Output is correct |
10 |
Correct |
661 ms |
35420 KB |
Output is correct |
11 |
Correct |
193 ms |
27512 KB |
Output is correct |
12 |
Correct |
647 ms |
35548 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
672 ms |
36868 KB |
Output is correct |
2 |
Correct |
626 ms |
37988 KB |
Output is correct |
3 |
Correct |
599 ms |
36832 KB |
Output is correct |
4 |
Correct |
721 ms |
36452 KB |
Output is correct |
5 |
Correct |
755 ms |
36328 KB |
Output is correct |
6 |
Correct |
665 ms |
36860 KB |
Output is correct |
7 |
Correct |
760 ms |
38500 KB |
Output is correct |
8 |
Correct |
755 ms |
36456 KB |
Output is correct |
9 |
Correct |
736 ms |
37736 KB |
Output is correct |
10 |
Correct |
648 ms |
36576 KB |
Output is correct |
11 |
Correct |
202 ms |
27512 KB |
Output is correct |
12 |
Correct |
660 ms |
36828 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
59 ms |
18600 KB |
Output is correct |
2 |
Correct |
12 ms |
16128 KB |
Output is correct |
3 |
Correct |
12 ms |
16128 KB |
Output is correct |
4 |
Correct |
89 ms |
19956 KB |
Output is correct |
5 |
Correct |
46 ms |
18424 KB |
Output is correct |
6 |
Correct |
12 ms |
16128 KB |
Output is correct |
7 |
Correct |
16 ms |
16256 KB |
Output is correct |
8 |
Correct |
16 ms |
16384 KB |
Output is correct |
9 |
Correct |
14 ms |
16256 KB |
Output is correct |
10 |
Correct |
50 ms |
18684 KB |
Output is correct |
11 |
Correct |
12 ms |
16128 KB |
Output is correct |
12 |
Correct |
13 ms |
16128 KB |
Output is correct |
13 |
Correct |
16 ms |
16128 KB |
Output is correct |
14 |
Correct |
12 ms |
16128 KB |
Output is correct |
15 |
Correct |
16 ms |
16128 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
726 ms |
35556 KB |
Output is correct |
2 |
Correct |
725 ms |
36704 KB |
Output is correct |
3 |
Correct |
750 ms |
36832 KB |
Output is correct |
4 |
Correct |
728 ms |
35036 KB |
Output is correct |
5 |
Correct |
725 ms |
36836 KB |
Output is correct |
6 |
Correct |
682 ms |
35420 KB |
Output is correct |
7 |
Correct |
790 ms |
36956 KB |
Output is correct |
8 |
Correct |
761 ms |
36960 KB |
Output is correct |
9 |
Correct |
665 ms |
35504 KB |
Output is correct |
10 |
Correct |
661 ms |
35420 KB |
Output is correct |
11 |
Correct |
193 ms |
27512 KB |
Output is correct |
12 |
Correct |
647 ms |
35548 KB |
Output is correct |
13 |
Correct |
672 ms |
36868 KB |
Output is correct |
14 |
Correct |
626 ms |
37988 KB |
Output is correct |
15 |
Correct |
599 ms |
36832 KB |
Output is correct |
16 |
Correct |
721 ms |
36452 KB |
Output is correct |
17 |
Correct |
755 ms |
36328 KB |
Output is correct |
18 |
Correct |
665 ms |
36860 KB |
Output is correct |
19 |
Correct |
760 ms |
38500 KB |
Output is correct |
20 |
Correct |
755 ms |
36456 KB |
Output is correct |
21 |
Correct |
736 ms |
37736 KB |
Output is correct |
22 |
Correct |
648 ms |
36576 KB |
Output is correct |
23 |
Correct |
202 ms |
27512 KB |
Output is correct |
24 |
Correct |
660 ms |
36828 KB |
Output is correct |
25 |
Correct |
59 ms |
18600 KB |
Output is correct |
26 |
Correct |
12 ms |
16128 KB |
Output is correct |
27 |
Correct |
12 ms |
16128 KB |
Output is correct |
28 |
Correct |
89 ms |
19956 KB |
Output is correct |
29 |
Correct |
46 ms |
18424 KB |
Output is correct |
30 |
Correct |
12 ms |
16128 KB |
Output is correct |
31 |
Correct |
16 ms |
16256 KB |
Output is correct |
32 |
Correct |
16 ms |
16384 KB |
Output is correct |
33 |
Correct |
14 ms |
16256 KB |
Output is correct |
34 |
Correct |
50 ms |
18684 KB |
Output is correct |
35 |
Correct |
12 ms |
16128 KB |
Output is correct |
36 |
Correct |
13 ms |
16128 KB |
Output is correct |
37 |
Correct |
16 ms |
16128 KB |
Output is correct |
38 |
Correct |
12 ms |
16128 KB |
Output is correct |
39 |
Correct |
16 ms |
16128 KB |
Output is correct |
40 |
Correct |
720 ms |
39136 KB |
Output is correct |
41 |
Correct |
822 ms |
39900 KB |
Output is correct |
42 |
Correct |
648 ms |
39648 KB |
Output is correct |
43 |
Correct |
364 ms |
29560 KB |
Output is correct |
44 |
Correct |
232 ms |
29560 KB |
Output is correct |
45 |
Correct |
739 ms |
42724 KB |
Output is correct |
46 |
Correct |
710 ms |
42340 KB |
Output is correct |
47 |
Correct |
630 ms |
39012 KB |
Output is correct |
48 |
Correct |
236 ms |
29048 KB |
Output is correct |
49 |
Correct |
613 ms |
37980 KB |
Output is correct |
50 |
Correct |
678 ms |
42888 KB |
Output is correct |
51 |
Correct |
817 ms |
42656 KB |
Output is correct |