Submission #739085

#TimeUsernameProblemLanguageResultExecution timeMemory
739085Username4132Jakarta Skyscrapers (APIO15_skyscraper)C++14
10 / 100
2 ms2516 KiB
#include<iostream> #include<vector> #include<queue> #include<set> using namespace std; #define forn(i, n) for(int i=0; i<(int)n; ++i) #define PB push_back struct node{ int pos, hop, cost; node(int Pos, int Hop, int Cost) : pos(Pos), hop(Hop), cost(Cost) {} }; const int MAXN=30010; int n, m, start, target; bool done[MAXN]; vector<int> ops[MAXN]; set<int> len[MAXN]; queue<node> Q; void add(node v){ if(len[v.pos].find(v.hop)==len[v.pos].end()){ len[v.pos].insert(v.hop); Q.push(v); } } int main(){ scanf("%d %d", &n, &m); forn(i, m){ int a, b; scanf("%d %d", &a, &b); ops[a].PB(b); if(i==0) start=a; if(i==1) target=a; } for(int doge:ops[start]) add(node(start, doge, 0)); int ans=-1; while(!Q.empty()){ node v = Q.front(); Q.pop(); if(v.pos==target) ans=v.cost; int le=v.pos-v.hop, ri=v.pos+v.hop; if(le>=0) add(node(le, v.hop, v.cost+1)); if(ri<n) add(node(ri, v.hop, v.cost+1)); if(!done[v.pos]){ for(int wi:ops[v.pos]) add(node(v.pos, wi, v.cost)); done[v.pos]=true; } } printf("%d\n", ans); }

Compilation message (stderr)

skyscraper.cpp: In function 'int main()':
skyscraper.cpp:29:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   29 |     scanf("%d %d", &n, &m);
      |     ~~~~~^~~~~~~~~~~~~~~~~
skyscraper.cpp:31:24: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   31 |         int a, b; scanf("%d %d", &a, &b);
      |                   ~~~~~^~~~~~~~~~~~~~~~~
#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...