Submission
Status:
[PPPPPPPPPPPPPPPPPPPP]
Score: 100
User: MiyaZaki1072
Problemset: รถยนต์ รถไฟ เรือเมล์ ลิเก ตำรวจ
Language: cpp
Time: 0.012 second
Submitted On: 2025-04-15 16:30:36
#include <bits/stdc++.h>
using namespace std;
vector<int>adjt[500];//train track
vector<int>adjc[500];//car track
bool tt[500][500];
struct A{
int v,w;
bool operator<(const A&o)const{
return w>o.w;
}
};
int disc[500],dist[500],anst=2e9,ansc=2e9;
int main(){
cin.tie(0)->sync_with_stdio(0);
int n,m;cin>>n>>m;
while(m--){
int u,v;cin>>u>>v;
adjt[u].push_back({v});
adjt[v].push_back({u});
tt[u][v]=tt[v][u]=1;
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(!tt[i][j])adjc[i].push_back(j);
}
}
memset(dist,0x3f,sizeof dist);
memset(disc,0x3f,sizeof disc);
priority_queue<A>pq;
pq.push({1,0});
disc[1]=0;
while(pq.size()){
A u = pq.top();pq.pop();
if(u.v == n){
ansc=u.w;
break;
}
if(disc[u.v] < u.w)continue;
for(auto &x:adjc[u.v]){
if(disc[x] > disc[u.v] + 10*abs(x-u.v)){
disc[x] = disc[u.v] + 10*abs(x-u.v);
pq.push({x,disc[x]});
}
}
}
while(pq.size())pq.pop();
pq.push({1,0});
dist[1]=0;
while(pq.size()){
A u = pq.top();pq.pop();
if(u.v == n){
anst=u.w;
break;
}
if(dist[u.v] < u.w)continue;
for(auto &x:adjt[u.v]){
if(dist[x] > dist[u.v] + 10*abs(x-u.v)){
dist[x] = dist[u.v] + 10*abs(x-u.v);
pq.push({x,dist[x]});
}
}
}
int ans = max(ansc,anst);
if(ans > 1e9)cout<<"-1";
else cout<<ans;
}