Submission #23564

#TimeUsernameProblemLanguageResultExecution timeMemory
23564samir_droubiJakarta Skyscrapers (APIO15_skyscraper)C++14
100 / 100
373 ms112020 KiB
#include <bits/stdc++.h>
using namespace std;
int n,m;
const int mxn=(1e5)+5;
vector<pair<int,int> >gr[mxn];
set<int>a[mxn];
set<pair<int,int> >s;
int st,en;
int dis[mxn];
set<pair<int,int> >::iterator it;
set<int>::iterator itt;
void dijk()
{
	for(int i=0;i<mxn;++i)dis[i]=(1e9);
	dis[st]=0;
	s.insert({0,st});
	while(!s.empty())
	{
		it=s.begin();
		int v=it->second;
		int d=it->first;
		s.erase(it);
		for(int i=0;i<gr[v].size();++i)
		{
			int u=gr[v][i].first;
			int w=gr[v][i].second;
			if(d+w<dis[u])
			{
				dis[u]=d+w;
				s.insert({d+w,u});
			}
		}
	}
}
int main()
{
	scanf("%d%d",&n,&m);
	for(int i=0;i<m;++i)
	{
		int b,p;
		scanf("%d%d",&b,&p);
		a[b].insert(p);
		if(i==0)st=b;
		if(i==1)en=b;
	}

	for(int i=0;i<n;++i)
	{
		itt=a[i].begin();
		for(itt;itt!=a[i].end();++itt)
		{
			int p=*itt;
			for(int j=1;i+(j*p)<n;++j)
			{
				int cur=i+(j*p);
				gr[i].push_back({cur,j});
				if(a[cur].count(p))break;
			}
		}
	}

	for(int i=n-1;i>=0;--i)
	{
		itt=a[i].begin();
		for(itt;itt!=a[i].end();++itt)
		{
			int p=*itt;
			for(int j=1;i-(j*p)>=0;++j)
			{
				int cur=i-(j*p);
				gr[i].push_back({cur,j});
				if(a[cur].count(p))break;
			}
		}
	}

	dijk();
	if(dis[en]==(1e9))dis[en]=-1;
	printf("%d\n",dis[en]);
	return 0;
}

Compilation message (stderr)

skyscraper.cpp: In function 'void dijk()':
skyscraper.cpp:23:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(int i=0;i<gr[v].size();++i)
                ^
skyscraper.cpp: In function 'int main()':
skyscraper.cpp:50:10: warning: statement has no effect [-Wunused-value]
   for(itt;itt!=a[i].end();++itt)
          ^
skyscraper.cpp:65:10: warning: statement has no effect [-Wunused-value]
   for(itt;itt!=a[i].end();++itt)
          ^
skyscraper.cpp:37:21: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d%d",&n,&m);
                     ^
skyscraper.cpp:41:22: 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...