제출 #212737

#제출 시각아이디문제언어결과실행 시간메모리
212737spdskatrJakarta Skyscrapers (APIO15_skyscraper)C++14
100 / 100
121 ms7924 KiB
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <functional>
#include <utility>
#include <cstring>
#define fi first
#define se second

using namespace std;
typedef pair<int, int> pii;

int N, M, b[30005], po[30005], seen[30005], dists[30005];
set<int> doges[30005];
priority_queue<pii, vector<pii>, greater<pii>> pq;

int main() {
	scanf("%d %d", &N, &M);
	for (int i = 0; i < M; i++) {
		scanf("%d %d", b+i, po+i);
		doges[b[i]].insert(po[i]);
	}
	memset(dists, 0x3f, sizeof(dists));
	dists[b[0]] = 0;
	pq.push({ 0, b[0] });
	while (!pq.empty()) {
		pii p = pq.top(); pq.pop();
		int u = p.se;
		if (u == b[1]) {
			printf("%d\n", dists[u]);
			return 0;
		}
		if (dists[u] < p.fi) continue;
		for (int doge : doges[u]) {
			for (int i = 1; u - i * doge >= 0; i++) {
				int k = u - i * doge;
				if (dists[k] > dists[u] + i) {
					dists[k] = dists[u] + i;
					pq.push({ dists[k], k });
				}
				if (doges[k].find(doge) != doges[k].end()) break;
			}
			for (int i = 1; u + i * doge < N; i++) {
				int k = u + i * doge;
				if (dists[k] > dists[u] + i) {
					dists[k] = dists[u] + i;
					pq.push({ dists[k], k });
				}
				if (doges[k].find(doge) != doges[k].end()) break;
			}
		}
	}
	printf("-1\n");
}

컴파일 시 표준 에러 (stderr) 메시지

skyscraper.cpp: In function 'int main()':
skyscraper.cpp:21:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d %d", &N, &M);
  ~~~~~^~~~~~~~~~~~~~~~~
skyscraper.cpp:23:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d %d", b+i, po+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...