Submission
Status:
[PPPPPPPPPPPPPPPPP-SS]
Score: 0
User: hmmm
Problemset: รถยนต์ รถไฟ เรือเมล์ ลิเก ตำรวจ
Language: cpp
Time: 0.017 second
Submitted On: 2025-03-15 17:30:24
#include<bits/stdc++.h>
using namespace std;
using pii=array<int,2>;
const int N=405;
int a[N][N],dis[N],dis2[N],ti[N],ti2[N],pa[N],pa2[N];
vector<pii> g[N],t[N];
bool vis[N],vis2[N];
int main(){
ios::sync_with_stdio(0); cin.tie(0);
int n,m;
cin >> n >> m;
for(int i=1;i<=m;i++){
int u,v;
cin >> u >> v;
g[u].push_back({v,10*abs(u-v)});
g[v].push_back({u,10*abs(u-v)});
int x=min(u,v);
int y=max(u,v);
a[x][y]=true;
}
for(int i=1;i<=n;i++){
dis[i]=dis2[i]=1e9;
for(int j=i+1;j<=n;j++){
if(a[i][j]==false){
t[i].push_back({j,10*abs(i-j)});
t[j].push_back({i,10*abs(i-j)});
// cout << i << ' ' << j << "aa\n";
}
}
}
priority_queue<pii,vector<pii>,greater<pii>> q;
q.push({dis[1]=0,1});
while(!q.empty()){
auto l=q.top()[0];
auto x=q.top()[1];
q.pop();
if(vis[x]) continue;
vis[x]=true;
for(auto e:g[x]){
auto xx=e[0];
auto ll=e[1];
if(vis[xx]==false && dis[xx]>dis[x]+ll){
dis[xx]=dis[x]+ll;
q.push({dis[xx],xx});
pa[x]=xx;
}
}
}
if(dis[n]==1e9){
cout << "-1";
return 0;
}
int to=1,cnt=1;
while(to!=0){
ti[to]=cnt;
to=pa[to];
cnt++;
}
q.push({dis2[1]=0,1});
while(!q.empty()){
auto l=q.top()[0];
auto x=q.top()[1];
q.pop();
// cout << l << ' ' << x << "--\n";
if(vis2[x]) continue;
vis2[x]=true;
for(auto e:t[x]){
auto xx=e[0];
auto ll=e[1];
if(xx!=n) if(dis[xx]==dis2[x]+ll) continue;
if(vis2[xx]==false && dis2[xx]>dis2[x]+ll){
dis2[xx]=dis2[x]+ll;
q.push({dis2[xx],xx});
pa2[x]=xx;
}
}
}
if(dis2[n]==1e9){
cout << "-1";
return 0;
}
to=1,cnt=1;
while(to!=0){
if(ti[to]==cnt && 1<to && to<n){
cout << "-1";
return 0;
}
to=pa2[to];
cnt++;
}
cout << max(dis[n],dis2[n]);
// for(int i=1;i<=n;i++){
// cout << dis[i] << ' ' << dis2[i] << "\n";
// }
}