Submission

Status:
[PPPPPPPPPPPPPPPPPPPP]

Score: 100

User: FotoFatTurtle

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

Language: cpp

Time: 0.017 second

Submitted On: 2025-03-20 13:57:52

#include <bits/stdc++.h>
using namespace std;
#define f first
#define s second
int node,edge,te,mp,temp;
int dij(vector<vector<pair<int,int>>> adj,int dist[])
{
    priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>> q;
    dist[1]=0;
    q.push({0,1});
    while(!q.empty())
    {
        te=q.top().f;
        mp=q.top().s;
        q.pop();
        if(dist[mp]<te)
            continue;
        for(int i=0;i<adj[mp].size();i++)
        {
            if(dist[adj[mp][i].s]>adj[mp][i].f+te)
            {
                dist[adj[mp][i].s]=te+adj[mp][i].f;
                q.push({adj[mp][i].f+te,adj[mp][i].s});
            }
        }
    }
    //cout<<dist[node]<<"\n";
    return dist[node];
}
int main(void)
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    cin>>node>>edge;
    vector<vector<pair<int,int>>> adjt(node+1),adjc(node+1);
    bool run[node+1][node+1]={};
    bool train=false;
    for(int i=0;i<edge;i++)
    {
        cin>>te>>mp;
        temp=mp-te;
        if(temp<0)
            temp*=-1;
        adjt[te].push_back({10*temp,mp});
        adjt[mp].push_back({10*temp,te});
        run[te][mp]=true;
        run[mp][te]=true;
    }
    for(int i=1;i<=node;i++)
    {
        for(int j=1;j<=node;j++)
        {
            if(i!=j&&run[i][j]==false)
            {
                temp=j-i;
                if(temp<0)
                    temp*=-1;
                adjc[i].push_back({10*temp,j});
                //cout<<i<<" "<<j<<"\n";
            }
        }
    }
    int dist1[node+1],dist2[node+1];
    for(int i=1;i<=node;i++)
    {
        dist1[i]=2e9;
        dist2[i]=2e9;
    }
    int ansc,anst,ans;
    anst=dij(adjt,dist1);
    ansc=dij(adjc,dist2);
    ans=max(anst,ansc);
    if(anst==2e9||ansc==2e9)
    {
        ans=-1;
    }
    //cout<<anst<<" "<<ansc;
    cout<<ans;
}