Submission

Status:
[PPPPPPPPPPPPPPPPPPPP]

Score: 100

User: Jibhong

Problemset: รถยนต์ รถไฟ เรือเมล์ ลิเก ตำรวจ

Language: cpp

Time: 0.184 second

Submitted On: 2025-03-23 16:47:05

#include <bits/stdc++.h>
using namespace std;
#define F first
#define S second
typedef pair<int,int> pii;
bool edge[405][405];
priority_queue<pair<int,pii>,vector<pair<int,pii>>,greater<pair<int,pii>>>pq;
vector<int> distA(405,2e9);
vector<int> distB(405,2e9);
bool visA[405];
bool visB[405];
int main(){
    int n,e;
    cin>>n>>e;
    for(int i=0;i<e;++i){
        int u,v;
        cin>>u>>v;
        edge[u][v]=1;
        edge[v][u]=1;
    }
    pq.push({0,{1,1}});
    distA[1]=0;
    distB[1]=0;
    while(!pq.empty()){
        int nowA=pq.top().S.F;
        int nowB=pq.top().S.S;
        pq.pop();
        if(nowA==nowB && nowA!=1)continue;
        for(int tonodeA=1;tonodeA<=n;++tonodeA){
            if(!edge[nowA][tonodeA] || tonodeA==nowA)continue;
            for(int tonodeB=1;tonodeB<=n;++tonodeB){
                if(edge[nowB][tonodeB] || tonodeB==nowB)continue;
                if(tonodeA==tonodeB)continue;
                int maxold=max(distA[tonodeA],distB[tonodeB]);
                int maxnew=max(distA[nowA]+abs(nowA-tonodeA),distB[nowB]+abs(nowB-tonodeB));
                if(maxold<=maxnew)continue;
                distA[tonodeA]=distA[nowA]+abs(nowA-tonodeA);
                distB[tonodeB]=distB[nowB]+abs(nowB-tonodeB);
                pq.push({maxnew,{tonodeA,tonodeB}});
            }
        }
    }
    int out=max(distA[n],distB[n]);
    if(out==2e9)
        cout<<-1;
    else
        cout<<out*10;
    return 0;
}