Submission #927168

#TimeUsernameProblemLanguageResultExecution timeMemory
927168Amirreza_FakhriJakarta Skyscrapers (APIO15_skyscraper)C++17
100 / 100
40 ms13264 KiB
#include <bits/stdc++.h>
const int MAXN=30007;
using namespace std;
vector<int> g[MAXN],w[MAXN];
set<int> v[MAXN];
bool vi[MAXN];
int dist[MAXN],en;
void dijkstra(int s)
{
	priority_queue<pair<int,int> > pq;
	pq.push(make_pair(0,s));
	while(!pq.empty())
	{
		int u=pq.top().second,d=-pq.top().first;
		pq.pop();
		if(vi[u]) continue;
		dist[u]=d;
		vi[u]=true;
		if(u==en) return;
		for(int i=0;i<g[u].size();i++) if(!vi[g[u][i]]) pq.push(make_pair(-d-w[u][i],g[u][i]));
	}
}
int main()
{
	int n,m,st,t1,t2;
	cin>>n>>m;
	cin>>st>>t1>>en>>t2;
	v[st].insert(-t1);
	v[en].insert(-t2);
	for(int i=0;i<m-2;i++)
	{
		cin>>t1>>t2;
		v[t1].insert(-t2);
	}
	for(int i=0;i<n;i++)
	{
		for(set<int>::iterator it=v[i].begin();it!=v[i].end();it++)
		{
			int t=-(*it),cur=i+t;
			while(cur<n)
			{
				if( v[cur].size()>0) 
				{
					g[i].push_back(cur);
					w[i].push_back((cur-i)/t);
					// vi[cur]=true;
				}
				if(v[cur].find(-t)!=v[cur].end()) break;
				cur+=t;
			} 
			cur=i-t;
			while(cur>=0)
			{
				if( v[cur].size()>0) 
				{
					g[i].push_back(cur);
					w[i].push_back((i-cur)/t);
					// vi[cur]=true;
				}
				if(v[cur].find(-t)!=v[cur].end()) break;
				cur-=t;
			}
		}
		// for(int j=0;j<g[i].size();j++) vi[g[i][j]]=false;
	}
	dijkstra(st);
	if(!vi[en]) dist[en]=-1;
	cout<<dist[en]<<"\n";
}

Compilation message (stderr)

skyscraper.cpp: In function 'void dijkstra(int)':
skyscraper.cpp:20:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   20 |   for(int i=0;i<g[u].size();i++) if(!vi[g[u][i]]) pq.push(make_pair(-d-w[u][i],g[u][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...