Submission #112914

#TimeUsernameProblemLanguageResultExecution timeMemory
112914nafis_shifatJakarta Skyscrapers (APIO15_skyscraper)C++14
0 / 100
4 ms1280 KiB
#include<bits/stdc++.h>
#define mx 30009
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[mx];
    
    
    
    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[mx+1];
    for(int i=0;i<=mx;i++)dist[i]=(int)2e9;
    priority_queue<pair<int,int>> pq;

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

Compilation message (stderr)

skyscraper.cpp: In function 'int main()':
skyscraper.cpp:72: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...