제출 #241449

#제출 시각아이디문제언어결과실행 시간메모리
241449maximath_1Jakarta Skyscrapers (APIO15_skyscraper)C++11
100 / 100
227 ms67940 KiB
/*D10-4 (100)*/
#include<bits/stdc++.h>
using namespace std;
vector<pair<int, int> >adj[30005];
set<int> building[30005];
priority_queue<pair<int, int>, vector<pair<int, int> >, greater<pair<int, int> > >pq;
int n, m, st, ed, dist[30005];
int ans=1e9+69;
int main(){
	scanf("%d%d", &n, &m);
	int b, p;
	scanf("%d%d", &st, &p); building[st].insert(p);
	scanf("%d%d", &ed, &p); building[ed].insert(p);
	for(int i=2; i<m; i++){
		scanf("%d%d", &b, &p);
		building[b].insert(p);
	}
	for(int i=0; i<n; i++) for(int p:building[i]){
		for(int j=1; i+j*p<n; j++){
			adj[i].push_back({i+j*p, j});
			if(building[i+j*p].count(p)) break;
		}
		for(int j=1; i-j*p>=0; j++){
			adj[i].push_back({i-j*p, j});
			if(building[i-j*p].count(p)) break;
		}
	}
	for(int i=0; i<n; i++) dist[i]=1e9+69;
	pq.push({0, st}); dist[st]=0;
	for(;!pq.empty();){
		int dst=pq.top().first, nw=pq.top().second;
		pq.pop();
		if(dist[nw]!=dst) continue;
		if(nw==ed) ans=min(ans, dst);
		for(pair<int, int> nx:adj[nw]){
			if(dist[nx.first]>dist[nw]+nx.second){
				dist[nx.first]=dist[nw]+nx.second;
				pq.push({dist[nx.first], nx.first});
			}
		}
	}
	if(ans==1e9+69) ans=-1;
	printf("%d\n", ans);
}

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

skyscraper.cpp: In function 'int main()':
skyscraper.cpp:10: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:12:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d%d", &st, &p); building[st].insert(p);
  ~~~~~^~~~~~~~~~~~~~~~~
skyscraper.cpp:13:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d%d", &ed, &p); building[ed].insert(p);
  ~~~~~^~~~~~~~~~~~~~~~~
skyscraper.cpp:15:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d%d", &b, &p);
   ~~~~~^~~~~~~~~~~~~~~~
#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...