Submission
Status:
[P-SSSSSSSSSSSSSSSSSS]
Subtask/Task Score:
{0/100}
Score: 0
User: tha_smith
Problemset: รถยนต์ รถไฟ เรือเมล์ ลิเก ตำรวจ
Language: cpp
Time: 0.002 second
Submitted On: 2026-03-04 22:30:54
#include <bits/stdc++.h>
using namespace std;
#define ll long long
int main() {
ios_base::sync_with_stdio(0),cin.tie(0);
int N,M;
cin >> N >> M;
vector<vector<char>> edge(N+1,vector<char> (N+1,0));
for(int i=0; i<M; i++) {
int a,b;
cin >> a >> b;
edge[a][b] = edge[b][a] = 1;
}
bool useedge = edge[1][N];
vector<ll> dist(N+1,0x3f);
vector<char> vis(N+1,0);
priority_queue<pair<ll,int>,vector<pair<ll,int>>,greater<pair<ll,int>>> pq;
dist[1]=0;
pq.push({0,1});
while(!pq.empty()) {
auto[w,u] = pq.top();
pq.pop();
if(vis[u])
continue;
vis[u]=1;
if(u==N)
break;
for(int v=1; v<=N; v++) {
if(u==v)
continue;
bool isedge = useedge ? (!edge[u][v]):(edge[u][v]); //if there's path from 1->N ignore real paths and accumulate fake paths instead, else use real paths
if(!isedge)
continue;
ll ww = (ll)(10*(abs(v-u)));
if(dist[v]>w+ww) {
dist[v] = w+ww;
pq.push({dist[v],v});
}
}
}
if(dist[N]>=1e18) {
cout << -1;
}
else {
cout << dist[N];
}
}