Submission
Status:
[PPPPPPPPPPPPPPPPPPPP]
Score: 100
User: Nozomi_boundfortokyo
Problemset: รถยนต์ รถไฟ เรือเมล์ ลิเก ตำรวจ
Language: cpp
Time: 0.010 second
Submitted On: 2025-03-20 11:03:25
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int g[401][401];
int n,m;
ll disttrain[401];
ll distcar[401];
ll findtrainfirst()
{
priority_queue<pair<ll,int>,vector<pair<ll,int>>,greater<pair<ll,int>>> pq;
for(int i=1;i<=n;i++)
{
disttrain[i]=1e9;
distcar[i]=1e9;
}
disttrain[1]=0;
distcar[1]=0;
pq.push({0,1});
while(!pq.empty())
{
int u=pq.top().second;
pq.pop();
for(int v=1;v<=n;v++)
{
if(!g[u][v]) continue;
if(disttrain[u]+10*abs(v-u)<disttrain[v])
{
disttrain[v]=disttrain[u]+10*abs(v-u);
pq.push({disttrain[v],v});
}
}
}
pq.push({0,1});
while(!pq.empty())
{
int u=pq.top().second;
pq.pop();
for(int v=1;v<=n;v++)
{
if(g[u][v]) continue;
else if(distcar[u]+10*abs(v-u)<distcar[v])
{
distcar[v]=distcar[u]+10*abs(v-u);
pq.push({distcar[v],v});
}
}
}
//check whether it reach
if(distcar[n]==1e9 || disttrain[n]==1e9)
return -1;
return max(disttrain[n],distcar[n]);
}
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
cin>>n>>m;
for(int i=0;i<m;i++)
{
int u,v;
cin>>u>>v;
g[u][v]=1; //1 is train 0 is car
g[v][u]=1;
}
ll d1=findtrainfirst();
cout<<d1;
}