Submission #249226

#TimeUsernameProblemLanguageResultExecution timeMemory
249226rdd6584Jakarta Skyscrapers (APIO15_skyscraper)C++14
57 / 100
1092 ms72952 KiB
#include <bits/stdc++.h> using namespace std; typedef pair<int ,int> pii; char visit[30000]; map<int,int> dist[30000]; vector<int> v[30000]; int main() { int n, m; scanf("%d %d", &n, &m); int st, ed; for (int i = 0; i < m; i++) { int a,b; scanf("%d %d" ,&a, &b); v[a].push_back(b); if (i==0) st = a; else if (i==1) ed = a; } queue<pii> q; for (int i : v[st]) dist[st][i] = 0, q.push({st, i}); while (!q.empty()) { pii tv = q.front(); q.pop(); if (tv.first == ed) return !printf("%d", dist[tv.first][tv.second]); int ne = tv.first-tv.second; int me = dist[tv.first][tv.second]; if (ne >= 0) { if (dist[ne].find(tv.second) == dist[ne].end()) { int flag = 0; if (!visit[ne]) { visit[ne] = 1; for (int i : v[ne]) { dist[ne][i] = me+1; q.push({ne, i}); flag |= i==tv.second; } } if (!flag) { q.push({ne, tv.second}); dist[ne][tv.second] = me + 1; } } } ne = tv.first+tv.second; if (ne < n) { if (dist[ne].find(tv.second) == dist[ne].end()) { int flag = 0; if (!visit[ne]) { visit[ne] = 1; for (int i : v[ne]) { dist[ne][i] = me+1; q.push({ne, i}); flag |= i==tv.second; } } if (!flag) { q.push({ne, tv.second}); dist[ne][tv.second] = me + 1; } } } } printf("-1"); }

Compilation message (stderr)

skyscraper.cpp: In function 'int main()':
skyscraper.cpp:11:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d %d", &n, &m);
     ~~~~~^~~~~~~~~~~~~~~~~
skyscraper.cpp:16:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%d %d" ,&a, &b);
         ~~~~~^~~~~~~~~~~~~~~~~
skyscraper.cpp:13:9: warning: 'st' may be used uninitialized in this function [-Wmaybe-uninitialized]
     int st, ed;
         ^~
skyscraper.cpp:29:9: warning: 'ed' may be used uninitialized in this function [-Wmaybe-uninitialized]
         if (tv.first == ed) return !printf("%d", dist[tv.first][tv.second]);
         ^~
#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...