Submission
Status:
[PPPPPPPPPPPPPPPPPPPP]
Subtask/Task Score:
{100/100}
Score: 100
User: VggT
Problemset: รถยนต์ รถไฟ เรือเมล์ ลิเก ตำรวจ
Language: cpp
Time: 0.042 second
Submitted On: 2026-03-12 16:14:16
#include <bits/stdc++.h>
using namespace std;
void path(vector<vector<pair<int,int>>> &vehiclesPath, vector<int> &dist)
{
priority_queue<pair<int,int>, vector<pair<int,int>> , greater<pair<int,int>> > pq;
pq.push({0,0});
while(!pq.empty())
{
int node = pq.top().second;
int distant = pq.top().first;
pq.pop();
for(auto neighbors : vehiclesPath[node])
{
if(dist[neighbors.first] > distant+neighbors.second)
{
dist[neighbors.first] = distant+neighbors.second;
pq.push({dist[neighbors.first],neighbors.first});
}
}
}
}
int main()
{
int n, m; cin >> n >> m;
vector<vector<pair<int,int>>> trainspath(n);
vector<vector<pair<int,int>>> roadspath(n);
vector<int> trainsDist(n,INT_MAX);
vector<int> roadsDist(n,INT_MAX);
vector<unordered_set<int>> contains(n);
for(int i = 0; i < m; i+=1)
{
int u,v; cin >> u >> v;
u-=1; v-=1;
trainspath[u].push_back({v,10*abs(v-u)});
trainspath[v].push_back({u,10*abs(u-v)});
contains[u].insert(v);
contains[v].insert(u);
}
for(int i = 0; i < n; i+=1)
{
for(int j = 0; j < n; j+=1)
{
if(contains[i].count(j)) continue;
roadspath[i].push_back({j,10*abs(j-i)});
roadspath[i].push_back({i,10*abs(i-j)});
}
}
path(trainspath,trainsDist);
path(roadspath,roadsDist);
if(trainsDist[n-1] == INT_MAX || roadsDist[n-1] == INT_MAX) cout << -1;
else cout << max(trainsDist[n-1],roadsDist[n-1]);
return 0;
}