Submission #1152563

#TimeUsernameProblemLanguageResultExecution timeMemory
1152563AlgorithmWarriorJakarta Skyscrapers (APIO15_skyscraper)C++20
0 / 100
0 ms328 KiB
#include <bits/stdc++.h>

using namespace std;

int const INF=1e9;
int const MAX=30005;
int pos[MAX];
int pas[MAX];
int n,m;

void read(){
    cin>>n>>m;
    int i;
    for(i=0;i<m;++i)
        cin>>pos[i]>>pas[i];
}

int drum[MAX];
bool ales[MAX];

int dist(int p1,int p2,int pas){
    if(p1>p2)
        swap(p1,p2);
    int dif=p2-p1;
    if(dif%pas==0)
        return dif/pas;
    return INF;
}

void dijkstra(){
    int i,j;
    for(i=1;i<=m;++i)
        drum[i]=INF;
    for(j=1;j<m;++j){
        int doge=m;
        for(i=0;i<m;++i)
            if(!ales[i] && drum[i]<drum[doge])
                doge=i;
        if(doge<m){
            ales[doge]=1;
            for(i=0;i<m;++i)
                if(drum[i]>drum[doge]+dist(pos[doge],pos[i],pas[doge]))
                    drum[i]=drum[doge]+dist(pos[doge],pos[i],pas[doge]);
        }
    }
}

void write(){
    if(drum[1]>m)
        drum[1]=INF;
    if(drum[1]==INF)
        cout<<-1;
    else
        cout<<drum[1];
}

int main()
{
    read();
    dijkstra();
    write();
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...