Submission #112883

#TimeUsernameProblemLanguageResultExecution timeMemory
112883nafis_shifatJakarta Skyscrapers (APIO15_skyscraper)C++14
10 / 100
3 ms1024 KiB
#include<bits/stdc++.h>

using namespace std;
int main()
{
    int n,m;
    cin>>n>>m;
    int b[m+1],p[m+1];
    int sp[n+1]={};
    for(int i=0;i<m;i++)
    {
        cin>>b[i];
        cin>>p[i];
        sp[b[i]]=p[i];
        
    }
    
    vector<pair<int,int>> edg[30009];
    
    
    
    queue<pair<int,int>> q;
    q.push({b[0],sp[b[0]]});
    int v1[n+1]={};
    while(!q.empty())
    {
        int st=q.front().first;
        int po=q.front().second;
        q.pop();
        if(v1[st])continue;
        v1[st]=1;
        
        int ind=0;
        for(int i=st+po;i<n;i+=po)
        {
            ind++;
            if(sp[i]!=0)
            {
                edg[st].push_back({i,ind});
                q.push({i,sp[i]});
            }
        }
        ind=0;
        for(int i=st-po;i>=0;i-=po)
        {
            ++ind;
            if(sp[i]!=0)
            {
                edg[st].push_back({i,ind});
                q.push({i,sp[i]});
            }
        }
    }
    int dist[n+1];
    for(int i=0;i<=n;i++)dist[i]=1e9+3;
    priority_queue<pair<int,int>> pq;

    
    pq.push({0,b[0]});
    dist[b[0]]=0;
    int vis[n+1]={};
    
    while(!pq.empty())
    {
        int u=pq.top().second;
        int w=-pq.top().first;
        pq.pop();
        if(u==b[1])
        {
            cout<<w<<endl;
            return 0;
        }
        if(vis[u])continue;
        vis[u]=1;
        for(int i=0;i<edg[u].size();i++)
        {
            
            if(dist[edg[u][i].first]>w+edg[u][i].second)
            {
                dist[edg[u][i].first]=w+edg[u][i].second;
               
                pq.push({-dist[edg[u][i].first],edg[u][i].first});
            }
        }
    }
    
    cout<<-1<<endl;
    
    
}

Compilation message (stderr)

skyscraper.cpp: In function 'int main()':
skyscraper.cpp:75:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for(int i=0;i<edg[u].size();i++)
                     ~^~~~~~~~~~~~~~
#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...