Submission #1137092

#TimeUsernameProblemLanguageResultExecution timeMemory
1137092alir3za_zar3Jakarta Skyscrapers (APIO15_skyscraper)C++20
100 / 100
181 ms5020 KiB
// Alir3za.Zar3 -> Shiraz , Iran
#include <bits/stdc++.h>
using namespace std;

const int N = 3e4+7, Inf = 1e9+7;
int n,m,b[N],p[N],l[N]; set<int> e[N];

void in ()
{
    cin >> n >> m;
    for (int i=1; i<=m; i++)
    {
        cin >> b[i] >> p[i];
        e[b[i]].insert(p[i]);
    }
    fill_n(l,N,Inf);
}

void Dijkstra ()
{
    set<pair<int,int>> q;
    l[b[1]]=0; q.insert({0,b[1]});
    while (!q.empty())
    {
        int v = q.begin()->second;
        q.erase(q.begin());
        for (auto o : e[v])
        {
            for (int i=v+o; i<=n; i+=o)
            {
                e[i].erase(o);
                if (l[i]>l[v]+(i-v)/o)
                {
                    q.erase({l[i],i});
                    l[i] = l[v]+(i-v)/o;
                    q.insert({l[i],i});
                }
            }
            for (int i=v-o; i>=0; i-=o)
            {
                e[i].erase(o);
                if (l[i]>l[v]+(v-i)/o)
                {
                    q.erase({l[i],i});
                    l[i] = l[v]+(v-i)/o;
                    q.insert({l[i],i});
                }
            }
        }
    }
}

void out ()
{
    if (l[b[2]]==Inf)
        cout << -1 << '\n';
    else
        cout << l[b[2]] << '\n';
}

signed main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);     cout.tie(0);
    
    in();
    Dijkstra();
    out();
}
#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...