Submission
Status:
[PPPPPPPPPPPPPPPPPPPP]
Subtask/Task Score:
{100/100}
Score: 100
User: C12
Problemset: รถยนต์ รถไฟ เรือเมล์ ลิเก ตำรวจ
Language: cpp
Time: 0.010 second
Submitted On: 2026-03-19 21:59:32
#include <bits/stdc++.h>
using namespace std;
const int mod = 1e9+7;
#define ll long long
#define pii pair<ll,int>
int adj_matrix[401][401];
ll dist_train[401];
ll dist_car[401];
int vis_train[401];
int vis_car[401];
vector<int> adj_train[401];
vector<int> adj_car[401];
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
int n,m,q;
cin >> n >> m;
int u,v,w;
for(int i = 0;i < m;i++){
cin >> u >> v;
if(u > v) swap(u,v);
adj_matrix[u][v] = 1;
}
for(int i = 1;i <= n;i++){
dist_car[i] = INT_MAX;
dist_train[i] = INT_MAX;
for(int j = 1;j < i;j++){
if(adj_matrix[j][i] == 0){
adj_car[i].push_back(j);
adj_car[j].push_back(i);
}
else{
adj_train[i].push_back(j);
adj_train[j].push_back(i);
}
}
}
priority_queue<pii,vector<pii>,greater<pii>> pq;
pq.push({0,1});
dist_car[1] = 0;
dist_train[1] = 0;
while (!pq.empty())
{
ll u = pq.top().second;
// cerr << "train" << ' ' << u << '\n';
pq.pop();
if(vis_train[u]) continue;
vis_train[u] = 1;
if(u == n) break;
for(ll v : adj_train[u]){
if(dist_train[v] > dist_train[u] + (abs(u-v))){
dist_train[v] = dist_train[u] + (abs(u-v));
pq.push({dist_train[v],v});
}
}
}
while (!pq.empty()) pq.pop();
pq.push({0,1});
while (!pq.empty())
{
ll u = pq.top().second;
// cerr << "car" << ' ' << u << '\n';
pq.pop();
if(vis_car[u]) continue;
vis_car[u] = 1;
if(u == n) break;
for(ll v : adj_car[u]){
if(dist_car[v] > dist_car[u] + (abs(u-v))){
dist_car[v] = dist_car[u] + (abs(u-v));
pq.push({dist_car[v],v});
}
}
}
if(!vis_car[n] || !vis_train[n]){
cout << -1;
}
else{
cout << max(dist_car[n],dist_train[n])*10LL;
}
return 0;
}