Submission #1150605

#TimeUsernameProblemLanguageResultExecution timeMemory
1150605danglayloi2Jakarta Skyscrapers (APIO15_skyscraper)C++20
100 / 100
102 ms7560 KiB
#include <bits/stdc++.h>
#define fi first
#define se second
#define inf 0x3f3f3f3f
using namespace std;
using ll = long long;
const int nx=3e4+5;
const int sq=175;
int n, m, d[nx], b[nx], p[nx], ans=inf;
vector<int> city[nx];
bool vis[nx][sq];
struct dak
{
    int i, w, p;
};
queue<dak> f;
int main()
{
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    cin>>n>>m;
    for(int i = 0; i < m; i++)
    {
        cin>>b[i]>>p[i];
        city[b[i]].emplace_back(i);
    }
    memset(d, -1, sizeof(d));
    f.push({b[0], 0, 0});
    while(f.size())
    {
        dak v=f.front();
        f.pop();
        int u=v.i, w=v.w, pw=v.p;
        if(u<0 || u>=n)
            continue;
        if(abs(pw)<sq)
        {
            if(vis[u][abs(pw)])
                continue;
            vis[u][abs(pw)]=1;
        }
        if(d[u]==-1)
        {
            d[u]=w;
            for(int i:city[u])
            {
                f.push({u-p[i], w+1, -p[i]});
                f.push({u+p[i], w+1, p[i]});
            }
        }
        f.push({u+pw, w+1, pw});
    }
    cout<<d[b[1]];
}
#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...