#include <bits/stdc++.h>
using namespace std;
vector<int> g[100007],h[100007],k[100007];
vector<long long> w[100007];
long long d[3][100007],dpl[2][100007],dpd[2][100007];
int n,degin[100007],ord[100007],cur;
bool st[100007];
void djikstra(int s,int a)
{
priority_queue<pair<long long,int> > pq;
fill(d[a],d[a]+100007,-1LL);
d[a][s]=0;
for(int i=0;i<g[s].size();i++) pq.push(make_pair(-w[s][i],g[s][i]));
while(!pq.empty())
{
long long t=-pq.top().first;
int x=pq.top().second;
pq.pop();
if(d[a][x]==-1)
{
d[a][x]=t;
for(int i=0;i<g[x].size();i++) pq.push(make_pair(-t-w[x][i],g[x][i]));
}
}
}
void praviDAG(int s,int a)
{
priority_queue<pair<long long,pair<int,int> > > pq;
fill(d[a],d[a]+100007,-1);
d[a][s]=0;
for(int i=0;i<g[s].size();i++) pq.push(make_pair(-w[s][i],make_pair(g[s][i],s)));
while(!pq.empty())
{
long long t=-pq.top().first;
int x=pq.top().second.first,y=pq.top().second.second;
pq.pop();
if(d[a][x]==-1)
{
d[a][x]=t;
for(int i=0;i<g[x].size();i++) pq.push(make_pair(-t-w[x][i],make_pair(g[x][i],x)));
}
if(d[a][x]==t)
{
h[y].push_back(x);
k[x].push_back(y);
}
}
}
void toposort()
{
queue<int> q;
for(int i=1;i<=n;i++) degin[i]=k[i].size();
for(int i=1;i<=n;i++) if(degin[i]==0) q.push(i);
while(!q.empty())
{
int u=q.front();
ord[cur++]=u;
q.pop();
for(int i=0;i<h[u].size();i++)
{
degin[h[u][i]]--;
if(degin[h[u][i]]==0) q.push(h[u][i]);
}
}
}
int main()
{
int m,s,t,u,v;
scanf("%d%d%d%d%d%d",&n,&m,&s,&t,&u,&v);
for(int i=0;i<m;i++)
{
int t1,t2;
long long t3;
scanf("%d%d%lld",&t1,&t2,&t3);
g[t1].push_back(t2);
g[t2].push_back(t1);
w[t1].push_back(t3);
w[t2].push_back(t3);
}
djikstra(u,0);
djikstra(v,1);
praviDAG(s,2);
toposort();
for(int i=0;i<cur;i++)
{
dpl[0][ord[i]]=d[0][ord[i]];
dpl[1][ord[i]]=d[1][ord[i]];
for(int j=0;j<k[ord[i]].size();j++)
{
dpl[0][ord[i]]=fmin(dpl[0][ord[i]],dpl[0][k[ord[i]][j]]);
dpl[1][ord[i]]=fmin(dpl[1][ord[i]],dpl[1][k[ord[i]][j]]);
}
}
st[t]=true;
for(int i=cur-1;i>=0;i--)
{
dpd[0][ord[i]]=d[0][ord[i]];
dpd[1][ord[i]]=d[1][ord[i]];
for(int j=0;j<h[ord[i]].size();j++) if(st[h[ord[i]][j]])
{
st[ord[i]]=true;
dpd[0][ord[i]]=fmin(dpd[0][ord[i]],dpd[0][h[ord[i]][j]]);
dpd[1][ord[i]]=fmin(dpd[1][ord[i]],dpd[1][h[ord[i]][j]]);
}
}
long long minimum=d[0][v];
for(int i=1;i<=n;i++) if(st[i]) minimum=fmin(minimum,dpd[0][i]+dpl[1][i]);
for(int i=1;i<=n;i++) if(st[i]) minimum=fmin(minimum,dpd[1][i]+dpl[0][i]);
printf("%lld",minimum);
}
Compilation message
commuter_pass.cpp: In function 'void djikstra(int, int)':
commuter_pass.cpp:13:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int i=0;i<g[s].size();i++) pq.push(make_pair(-w[s][i],g[s][i]));
~^~~~~~~~~~~~
commuter_pass.cpp:22:17: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int i=0;i<g[x].size();i++) pq.push(make_pair(-t-w[x][i],g[x][i]));
~^~~~~~~~~~~~
commuter_pass.cpp: In function 'void praviDAG(int, int)':
commuter_pass.cpp:31:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int i=0;i<g[s].size();i++) pq.push(make_pair(-w[s][i],make_pair(g[s][i],s)));
~^~~~~~~~~~~~
commuter_pass.cpp:40:17: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int i=0;i<g[x].size();i++) pq.push(make_pair(-t-w[x][i],make_pair(g[x][i],x)));
~^~~~~~~~~~~~
commuter_pass.cpp: In function 'void toposort()':
commuter_pass.cpp:59:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int i=0;i<h[u].size();i++)
~^~~~~~~~~~~~
commuter_pass.cpp: In function 'int main()':
commuter_pass.cpp:88:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int j=0;j<k[ord[i]].size();j++)
~^~~~~~~~~~~~~~~~~
commuter_pass.cpp:99:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int j=0;j<h[ord[i]].size();j++) if(st[h[ord[i]][j]])
~^~~~~~~~~~~~~~~~~
commuter_pass.cpp:69:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%d%d%d%d%d%d",&n,&m,&s,&t,&u,&v);
~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
commuter_pass.cpp:74:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%d%d%lld",&t1,&t2,&t3);
~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
825 ms |
33236 KB |
Output is correct |
2 |
Correct |
812 ms |
35080 KB |
Output is correct |
3 |
Correct |
725 ms |
35080 KB |
Output is correct |
4 |
Correct |
867 ms |
35080 KB |
Output is correct |
5 |
Correct |
771 ms |
35080 KB |
Output is correct |
6 |
Correct |
793 ms |
35080 KB |
Output is correct |
7 |
Correct |
800 ms |
35796 KB |
Output is correct |
8 |
Correct |
824 ms |
36000 KB |
Output is correct |
9 |
Correct |
837 ms |
36000 KB |
Output is correct |
10 |
Correct |
740 ms |
37872 KB |
Output is correct |
11 |
Correct |
315 ms |
37872 KB |
Output is correct |
12 |
Correct |
783 ms |
45120 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
791 ms |
45120 KB |
Output is correct |
2 |
Correct |
733 ms |
45120 KB |
Output is correct |
3 |
Correct |
714 ms |
45120 KB |
Output is correct |
4 |
Correct |
740 ms |
45120 KB |
Output is correct |
5 |
Correct |
725 ms |
45120 KB |
Output is correct |
6 |
Correct |
720 ms |
45120 KB |
Output is correct |
7 |
Correct |
706 ms |
45120 KB |
Output is correct |
8 |
Correct |
697 ms |
45120 KB |
Output is correct |
9 |
Correct |
733 ms |
45120 KB |
Output is correct |
10 |
Correct |
853 ms |
45120 KB |
Output is correct |
11 |
Correct |
300 ms |
45120 KB |
Output is correct |
12 |
Correct |
773 ms |
45120 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
49 ms |
45120 KB |
Output is correct |
2 |
Correct |
13 ms |
45120 KB |
Output is correct |
3 |
Correct |
12 ms |
45120 KB |
Output is correct |
4 |
Correct |
89 ms |
45120 KB |
Output is correct |
5 |
Correct |
63 ms |
45120 KB |
Output is correct |
6 |
Correct |
17 ms |
45120 KB |
Output is correct |
7 |
Correct |
15 ms |
45120 KB |
Output is correct |
8 |
Correct |
16 ms |
45120 KB |
Output is correct |
9 |
Correct |
13 ms |
45120 KB |
Output is correct |
10 |
Correct |
46 ms |
45120 KB |
Output is correct |
11 |
Correct |
12 ms |
45120 KB |
Output is correct |
12 |
Correct |
11 ms |
45120 KB |
Output is correct |
13 |
Correct |
12 ms |
45120 KB |
Output is correct |
14 |
Correct |
14 ms |
45120 KB |
Output is correct |
15 |
Correct |
13 ms |
45120 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
825 ms |
33236 KB |
Output is correct |
2 |
Correct |
812 ms |
35080 KB |
Output is correct |
3 |
Correct |
725 ms |
35080 KB |
Output is correct |
4 |
Correct |
867 ms |
35080 KB |
Output is correct |
5 |
Correct |
771 ms |
35080 KB |
Output is correct |
6 |
Correct |
793 ms |
35080 KB |
Output is correct |
7 |
Correct |
800 ms |
35796 KB |
Output is correct |
8 |
Correct |
824 ms |
36000 KB |
Output is correct |
9 |
Correct |
837 ms |
36000 KB |
Output is correct |
10 |
Correct |
740 ms |
37872 KB |
Output is correct |
11 |
Correct |
315 ms |
37872 KB |
Output is correct |
12 |
Correct |
783 ms |
45120 KB |
Output is correct |
13 |
Correct |
791 ms |
45120 KB |
Output is correct |
14 |
Correct |
733 ms |
45120 KB |
Output is correct |
15 |
Correct |
714 ms |
45120 KB |
Output is correct |
16 |
Correct |
740 ms |
45120 KB |
Output is correct |
17 |
Correct |
725 ms |
45120 KB |
Output is correct |
18 |
Correct |
720 ms |
45120 KB |
Output is correct |
19 |
Correct |
706 ms |
45120 KB |
Output is correct |
20 |
Correct |
697 ms |
45120 KB |
Output is correct |
21 |
Correct |
733 ms |
45120 KB |
Output is correct |
22 |
Correct |
853 ms |
45120 KB |
Output is correct |
23 |
Correct |
300 ms |
45120 KB |
Output is correct |
24 |
Correct |
773 ms |
45120 KB |
Output is correct |
25 |
Correct |
49 ms |
45120 KB |
Output is correct |
26 |
Correct |
13 ms |
45120 KB |
Output is correct |
27 |
Correct |
12 ms |
45120 KB |
Output is correct |
28 |
Correct |
89 ms |
45120 KB |
Output is correct |
29 |
Correct |
63 ms |
45120 KB |
Output is correct |
30 |
Correct |
17 ms |
45120 KB |
Output is correct |
31 |
Correct |
15 ms |
45120 KB |
Output is correct |
32 |
Correct |
16 ms |
45120 KB |
Output is correct |
33 |
Correct |
13 ms |
45120 KB |
Output is correct |
34 |
Correct |
46 ms |
45120 KB |
Output is correct |
35 |
Correct |
12 ms |
45120 KB |
Output is correct |
36 |
Correct |
11 ms |
45120 KB |
Output is correct |
37 |
Correct |
12 ms |
45120 KB |
Output is correct |
38 |
Correct |
14 ms |
45120 KB |
Output is correct |
39 |
Correct |
13 ms |
45120 KB |
Output is correct |
40 |
Correct |
702 ms |
48088 KB |
Output is correct |
41 |
Correct |
745 ms |
52768 KB |
Output is correct |
42 |
Correct |
791 ms |
56868 KB |
Output is correct |
43 |
Correct |
298 ms |
56868 KB |
Output is correct |
44 |
Correct |
325 ms |
56868 KB |
Output is correct |
45 |
Correct |
803 ms |
64852 KB |
Output is correct |
46 |
Correct |
745 ms |
67784 KB |
Output is correct |
47 |
Correct |
803 ms |
71804 KB |
Output is correct |
48 |
Correct |
416 ms |
71804 KB |
Output is correct |
49 |
Correct |
770 ms |
76752 KB |
Output is correct |
50 |
Correct |
757 ms |
80256 KB |
Output is correct |
51 |
Correct |
756 ms |
83920 KB |
Output is correct |