Submission #73023

# Submission time Handle Problem Language Result Execution time Memory
73023 2018-08-27T13:44:58 Z mraron Bitaro’s Party (JOI18_bitaro) C++14
7 / 100
2000 ms 62072 KB
#include<bits/stdc++.h>
using namespace std;
#define pb push_back
vector<int> adj[100001];
vector<int> badj[100001];
int indeg[100001];
const int BLKSZ=150;
vector<pair<int,int>> best[100001];
int dp[100010];
int bannolt[100010];

int dfs(int x) {
	if(dp[x]!=-2) {
		return dp[x];
	}
	
	int ans=-1;
	if(!bannolt[x]) {
		ans=0;
	}
	
	for(auto i:badj[x]) {
		if(dfs(i)>=0) {
			ans=max(ans, dfs(i)+1);
		}
	}
	
//	cerr<<x<<"->"<<ans<<" | "<<bannolt[x]<<"\n";
	
	return dp[x]=ans;
}
int main() {
	int n,m,q;
	cin>>n>>m>>q;
	for(int i=0;i<m;++i) {
		int a,b;
		cin>>a>>b;
		adj[a].pb(b);
		badj[b].pb(a);
		indeg[b]++;
	}
	
	set<pair<int,int>> st;
	for(int i=1;i<=n;++i) {
		st.insert({indeg[i], i});
	}
	
	while(!st.empty()) {
		pair<int,int> akt=*st.begin();
		st.erase(st.begin());
		
		//priority_queue<pair<int,int>> pq; //(dist, honnan)
		//pq.push({0, akt.second});
		map<int,int> mx;
		mx[akt.second]=0;
		for(auto i:badj[akt.second]) {
			for(auto j:best[i]) {
				mx[j.second]=max(mx[j.second], j.first+1);
			}
		}
		
		vector<pair<int,int>> lst;
		for(auto i:mx) {
			lst.push_back({i.second, i.first});
		}
		
		sort(lst.begin(), lst.end());
		reverse(lst.begin(), lst.end());
		
		
		for(int i=0;i<(int)lst.size() && i<BLKSZ;++i) {
			best[akt.second].push_back(lst[i]);
		}
	
		for(auto i:adj[akt.second]) {
			auto it=st.lower_bound({indeg[i], i});
			auto val=*it;
			st.erase(it);
			
			val.first--;
			indeg[i]--;
			
			st.insert(val);
		}
	}

	
	for(int i=0;i<q;++i) {
		int place;
		int cnt;
		cin>>place>>cnt;
		vector<int> banned(cnt);
		
		for(int i=0;i<cnt;++i) {
			cin>>banned[i];
			bannolt[banned[i]]=1;
		}
		
		bool ok=false;
		for(int j=0;j<(int)best[place].size();++j) {
			if(!bannolt[best[place][j].second]) {
				ok=true;
				cout<<best[place][j].first<<"\n";
				break ;
			}
		}
		
		if(ok) {
			for(int i=0;i<cnt;++i) {
				bannolt[banned[i]]=0;
			}
			continue ;
		}else if(best[place].size()<BLKSZ) {
			cout<<"-1\n";
			for(int i=0;i<cnt;++i) {
				bannolt[banned[i]]=0;
			}
			continue ;
		}
		
		for(int i=1;i<=place;++i) {
			dp[i]=-2;
		}
		

		cout<<dfs(place)<<"\n";
		
		for(int i=0;i<cnt;++i) {
			bannolt[banned[i]]=0;
		}
		
	}
	
	return 0;
}
# Verdict Execution time Memory Grader output
1 Correct 10 ms 7292 KB Output is correct
2 Correct 11 ms 7412 KB Output is correct
3 Correct 11 ms 7560 KB Output is correct
4 Correct 10 ms 7616 KB Output is correct
5 Correct 25 ms 8028 KB Output is correct
6 Correct 25 ms 8104 KB Output is correct
7 Correct 22 ms 8108 KB Output is correct
8 Correct 41 ms 9684 KB Output is correct
9 Correct 41 ms 9684 KB Output is correct
10 Correct 39 ms 9684 KB Output is correct
11 Correct 46 ms 9684 KB Output is correct
12 Correct 43 ms 9684 KB Output is correct
13 Correct 43 ms 9684 KB Output is correct
14 Correct 41 ms 9684 KB Output is correct
15 Correct 34 ms 9684 KB Output is correct
16 Correct 37 ms 9684 KB Output is correct
17 Correct 40 ms 9684 KB Output is correct
18 Correct 35 ms 9684 KB Output is correct
19 Correct 42 ms 9684 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 10 ms 7292 KB Output is correct
2 Correct 11 ms 7412 KB Output is correct
3 Correct 11 ms 7560 KB Output is correct
4 Correct 10 ms 7616 KB Output is correct
5 Correct 25 ms 8028 KB Output is correct
6 Correct 25 ms 8104 KB Output is correct
7 Correct 22 ms 8108 KB Output is correct
8 Correct 41 ms 9684 KB Output is correct
9 Correct 41 ms 9684 KB Output is correct
10 Correct 39 ms 9684 KB Output is correct
11 Correct 46 ms 9684 KB Output is correct
12 Correct 43 ms 9684 KB Output is correct
13 Correct 43 ms 9684 KB Output is correct
14 Correct 41 ms 9684 KB Output is correct
15 Correct 34 ms 9684 KB Output is correct
16 Correct 37 ms 9684 KB Output is correct
17 Correct 40 ms 9684 KB Output is correct
18 Correct 35 ms 9684 KB Output is correct
19 Correct 42 ms 9684 KB Output is correct
20 Correct 1084 ms 11920 KB Output is correct
21 Correct 1083 ms 11924 KB Output is correct
22 Correct 1145 ms 11944 KB Output is correct
23 Correct 1034 ms 12016 KB Output is correct
24 Execution timed out 2044 ms 62072 KB Time limit exceeded
25 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 10 ms 7292 KB Output is correct
2 Correct 11 ms 7412 KB Output is correct
3 Correct 11 ms 7560 KB Output is correct
4 Correct 10 ms 7616 KB Output is correct
5 Correct 25 ms 8028 KB Output is correct
6 Correct 25 ms 8104 KB Output is correct
7 Correct 22 ms 8108 KB Output is correct
8 Correct 41 ms 9684 KB Output is correct
9 Correct 41 ms 9684 KB Output is correct
10 Correct 39 ms 9684 KB Output is correct
11 Correct 46 ms 9684 KB Output is correct
12 Correct 43 ms 9684 KB Output is correct
13 Correct 43 ms 9684 KB Output is correct
14 Correct 41 ms 9684 KB Output is correct
15 Correct 34 ms 9684 KB Output is correct
16 Correct 37 ms 9684 KB Output is correct
17 Correct 40 ms 9684 KB Output is correct
18 Correct 35 ms 9684 KB Output is correct
19 Correct 42 ms 9684 KB Output is correct
20 Correct 1084 ms 11920 KB Output is correct
21 Correct 1083 ms 11924 KB Output is correct
22 Correct 1145 ms 11944 KB Output is correct
23 Correct 1034 ms 12016 KB Output is correct
24 Execution timed out 2044 ms 62072 KB Time limit exceeded
25 Halted 0 ms 0 KB -