제출 #1216233

#제출 시각아이디문제언어결과실행 시간메모리
1216233Muhammad_AneeqEvent Hopping (BOI22_events)C++20
10 / 100
1595 ms589824 KiB
#include <iostream>
#include <vector>
#include <algorithm>
#include <set>
#include <queue>
using namespace std;
int const N=1e5+10;
int n,q;
int dist[N]={};
vector<int>nei[N]={};
void bfs(int s,int e)
{
	queue<int>Q;
	for (int i=1;i<=n;i++)
		dist[i]=1e9+10;
	dist[s]=0;
	Q.push(s);
	while (Q.size())
	{
		int z=Q.front();
		Q.pop();
		for (auto i:nei[z])
		{
			if (dist[i]>dist[z]+1)
			{
				dist[i]=dist[z]+1;
				Q.push(i);
			}
		}
	}
}
inline void solve()
{
	cin>>n>>q;
	int l[n+1],r[n+1];
	vector<pair<int,int>>seg;
	for (int i=1;i<=n;i++)
	{
		cin>>l[i]>>r[i];	
		seg.push_back({l[i],-i});
		seg.push_back({r[i],i});
	}
	sort(begin(seg),end(seg));
	set<int>s;
	for (int i=0;i<seg.size();i++)
	{
		int j=i;
		while (j<seg.size()&&seg[j].first==seg[i].first)
		{
			if (seg[j].second<0)
				s.insert(-seg[j].second);
			else
			{
				for (auto k:s)
				{
					if (k!=seg[j].second)
						nei[seg[j].second].push_back(k);
				}
			}
			j++;
		}
		j--;
		for (int l=i;l<=j;l++)
		{
			if (seg[l].second>0)
				s.erase(seg[l].second);
		}
		i=j;
	}
	while (q--)
	{
		int s,e;
		cin>>s>>e;
		bfs(s,e);
		if (dist[e]==1e9+10)
			cout<<"impossible\n";
		else
			cout<<dist[e]<<'\n';
	}
}
int main()
{
    ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
    int t=1;
    for (int i=1;i<=t;i++)
    {
        solve();
    }
}
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...