Submission #233956

#TimeUsernameProblemLanguageResultExecution timeMemory
233956kshitij_sodaniBitaro’s Party (JOI18_bitaro)C++17
7 / 100
2084 ms6908 KiB
#include <bits/stdc++.h>
using namespace std;
typedef int64_t llo;
#define mp make_pair
#define pb push_back
#define a first
#define b second
int n,m,q,aa,bb;
int vis[100001];
vector<int> adj[100001];
int x;
const int ss=316;
int dp[100001];
int calc(int ind){
	for(int i=0;i<ind+1;i++){
		dp[i]=0;
		if(vis[i]){
			dp[i]=-1;
		}
		for(auto j:adj[i]){
			if(dp[j]!=-1){
				dp[i]=max(dp[i],dp[j]+1);
			}
		}
	}
	return dp[ind];
}
pair<int,int> dist[100001][ss];
int ind[100001];
int pre(){
	for(int i=0;i<n;i++){
		priority_queue<pair<int,int>> sso;
		for(auto j:adj[i]){
			for(int k=0;k<ind[j];k++){
				sso.push(dist[j][k]);
			
			}
		}
		int co=0;
		while(co<ss and sso.size()){
			pair<int,int> tt=sso.top();
			sso.pop();
			if(vis[tt.b]){
				continue;
			}
			vis[tt.b]=1;
			dist[i][co]={tt.a+1,tt.b};
	//		cout<<i<<","<<tt.a+1<<","<<tt.b<<endl;
			co+=1;
		}
		for(int j=0;j<co;j++){
			vis[dist[i][j].b]=0;
		}
		if(co<ss){
			dist[i][co]={0,i};
	//		cout<<i<<","<<0<<" "<<i<<endl;
			co+=1;
		}
		ind[i]=co;
	//	cout<<i<<"  "<<co<<endl;
	}
}
int main(){
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cin>>n>>m>>q;
	for(int i=0;i<n;i++){
		vis[i]=0;
	}
	for(int i=0;i<m;i++){
		cin>>aa>>bb;
		adj[bb-1].pb(aa-1);
	}
	pre();
	int indd,nn;
	for(int ii=0;ii<q;ii++){
		cin>>indd>>nn;
		indd-=1;
		vector<int> cur;
		int co=0;
		for(int j=0;j<nn;j++){
			cin>>x;
			x-=1;
		//	if(adj[x].size()==0){
				vis[x]=1;
				cur.pb(x);
				co+=1;
		//	}
		}
		if(co>=ss){
			cout<<calc(indd)<<endl;
		}
		else{
			int st=0;
			for(int i=0;i<ind[indd];i++){
				if(vis[dist[indd][i].b]){
					continue;
				}
				st=1;
				cout<<dist[indd][i].a<<endl;
				break;
			}
			if(st==0){
				cout<<-1<<endl;
			}
		}
		for(auto j:cur){
			vis[j]=0;
		}
	}



	return 0;
}

Compilation message (stderr)

bitaro.cpp: In function 'int pre()':
bitaro.cpp:62:1: warning: no return statement in function returning non-void [-Wreturn-type]
 }
 ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...