Submission
Status:
[PPPPPPPPPPPPPPPPPPPP]
Subtask/Task Score:
{100/100}
Score: 100
User: nemuchannnUwU
Problemset: รถยนต์ รถไฟ เรือเมล์ ลิเก ตำรวจ
Language: cpp
Time: 0.015 second
Submitted On: 2026-03-11 13:52:54
#include<bits/stdc++.h>
#define int long long
using namespace std;
int solve(vector<vector<pair<int,int>>> &adj,int n){
priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>> pq;
vector<int> dist(n+1,LLONG_MAX);
dist[1]=0;
pq.push({0,1});
while(!pq.empty()){
int d=pq.top().first;
int u=pq.top().second;
pq.pop();
if (d>dist[u]) continue;
for (auto &p : adj[u]){
int w=p.second;
int v=p.first;
if (dist[v]>d+w){
dist[v]=d+w;
pq.push({dist[v],v});
}
}
}
return dist[n];
}
main(){
cin.tie(nullptr)->sync_with_stdio(0);
bool has_rail[405][405]={false};
int n,m; cin >> n >> m;
vector<vector<pair<int,int>>> rail(n+1),road(n+1);
for (int i=0;i<m;i++){
int v,u; cin >> v >> u;
has_rail[v][u]=has_rail[u][v]=true;
}
for (int i=1;i<=n;i++){
for (int j=1+1;j<=n;j++){
int w=10*abs(i-j);
if (has_rail[i][j]){
rail[i].push_back({j,w});
rail[j].push_back({i,w});
}else{
road[i].push_back({j,w});
road[j].push_back({i,w});
}
}
}
int ro=solve(road,n);
int ra=solve(rail,n);
if (ro==LLONG_MAX||ra==LLONG_MAX) cout << -1;
else cout << max(ro,ra);
}