제출 #315867

#제출 시각아이디문제언어결과실행 시간메모리
315867parsabahramiJakarta Skyscrapers (APIO15_skyscraper)C++17
100 / 100
948 ms7160 KiB
//! Starman - Dawid Bowie
#pragma GCC optimize("O2")
#pragma GCC optimize("unroll-loops")
#include <bits/stdc++.h>
 
using namespace std;

typedef long long int ll;
typedef pair<ll, ll> pll;
 
#define sz(x)                       (ll) x.size()
#define all(x)                      (x).begin(),(x).end()
#define F                           first
#define S                           second

ll Pow(ll a, ll b, ll md, ll ans = 1) {
    for (; b; b >>= 1, a = a * a % md)
        if (b & 1)
            ans = ans * a % md;
    return ans % md;
}
const ll MAXN = 5e4 + 10;
const ll INF  = 1e18;
const ll MOD  = 1e9 + 7;
priority_queue<pll> pq; vector<ll> vec[MAXN];
ll mark[MAXN], dist[MAXN], B[MAXN], P[MAXN], st, en, n, m;

int main() {
	scanf("%lld%lld", &n, &m);
	for (ll i = 0; i < m; i++) {
		scanf("%lld%lld", &B[i], &P[i]);
		if (i == 0) st = B[i];
		if (i == 1) en = B[i];
		vec[B[i]].push_back(P[i]);
	}
	fill(dist, dist + MAXN, INF);
	pq.push({dist[st] = 0, st});
	while (sz(pq)) {
		ll v = pq.top().S; pq.pop();
		if (mark[v]) continue;
		mark[v] = 1;
		for (ll u : vec[v]) {
			for (ll i = 0, j = v; j >= 0; j -= u, i++) {
				if (dist[j] > dist[v] + i) {
					dist[j] = dist[v] + i;
					pq.push({-dist[j], j});
				}
			}
			for (ll i = 0, j = v; j < n; j += u, i++) {
				if (dist[j] > dist[v] + i) {
					dist[j] = dist[v] + i;
					pq.push({-dist[j], j});
				}
			}
		}
	}
	if (dist[en] == INF) return !printf("-1\n");
	else printf("%lld\n", dist[en]);
    return 0;
}

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

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