제출 #1126661

#제출 시각아이디문제언어결과실행 시간메모리
1126661Mikael639Bitaro’s Party (JOI18_bitaro)C++20
14 / 100
2108 ms481144 KiB
#include <bits/stdc++.h>

#define For(i, a, b) for (int i = (a); i <= (b); ++i)
#define ForD(i, a, b) for (int i = (a); i >= (b); --i)
#define rep(i, n) for (int i = 0; i < (n); ++i)
#define repD(i, n) for (int i = (n) - 1; i >= 0; --i)

#define pb push_back

#define sz(x) (int)x.size()

#define endl '\n'

#define fi first
#define se second

#define ii pair<int, int>
#define vi vector<int>

using namespace std;

template <class X, class Y>
	bool minimize(X &x, Y y){
		if (x > y){
			x = y;
			return 1;
		}
		
		return 0;
	}

template <class X, class Y>
	bool maximize(X &x, Y y){
		if (x < y){
			x = y;
			return 1;
		}
		
		return 0;
	}


const int N = 1e5 + 5;
const int B = 100;
const int INF = 1e9;

int n, m, q, busy_pussy[N];
vi g[N];
bool busy[N];
int dp[N];

set<ii, greater<>> st[N];

signed main(){

	ios_base::sync_with_stdio(0); 
	cin.tie(0); cout.tie(0);
	
	cin >> n >> m >> q;
	rep(i, m){
		int u, v; cin >> u >> v;
		g[v].pb(u);
	}
	
	For(i, 1, n){
		st[i].insert({0, i});
		for (int j: g[i]){
			for (ii p: st[j]){
				++p.fi;
				if (sz(st[i]) < B) st[i].insert(p);
				else{
					if (st[i].rbegin()->fi >= p.fi) break;
					st[i].erase(*st[i].rbegin());
					st[i].insert(p);
				}
			}
		}
	}
	
	while (q--){
		int u, k; cin >> u >> k;
		int cnt = 0;
		rep(i, k){
			cin >> busy_pussy[i];
			if (busy_pussy[i] > u) continue;
			
			++cnt;
			busy[busy_pussy[i]] = 1;	
		}
		
		if (cnt < sz(st[u])){
			bool ok = 0;
			for (auto [d, v]: st[u]) if (!busy[v]){
				cout << d << '\n';
				ok = 1;
				break;
			}
			if (!ok) cout << -1 << '\n';
		}
		else{
			For(i, 1, u){
				dp[i] = busy[i] ? -INF : 0;
				for (int j: g[i]){
					maximize(dp[i], dp[j] + 1);
				}
			}
			cout << (dp[u] >= 0 ? dp[u] : -1) << '\n';
		}
		
		rep(i, k) busy[busy_pussy[i]] = 0;	
	}

	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...