제출 #1338416

#제출 시각아이디문제언어결과실행 시간메모리
1338416JPEGraidBitaro’s Party (JOI18_bitaro)C++20
0 / 100
1 ms344 KiB
#include <bits/stdc++.h>
#define int long long
using namespace std;
#define F first
#define S second
#define pb push_back

void solve() {
	int n, m, q; cin >> n >> m >> q;
	vector<pair<int, int>> gg(m);
	vector<pair<int, vector<int>>> ww(q);
	for(int i = 0 ; i < m ; i++) {
		cin >> gg[i].F >> gg[i].S;
		gg[i].F--;
		gg[i].S--;
	}

	for(int i = 0 ; i < q ; i++) {
		cin >> ww[i].F;
		int y; cin >> y;
		for(int j = 0 ; j < y ; j++) cin >> ww[i].S[j];
	}

	vector<vector<int>> got(n);
	for(int i = 0 ; i < m ; i++) {
		got[gg[i].F].push_back(gg[i].S);
	}

	// const int BLOCK_S = 500;
	// for(int i = 0 ; i < q ; i++) {
	// 	if(ww[i].S.size() >= BLOCK_S) {
	// 		vector<int> dp(n, 0);
	// 		for(int j = 0 ; j < n ; j++) {
	// 			for(int k = ww[i].F ; k < got[i].size() ; k++) {
	// 				dp[j] = max(dp[j], dp[k] + 1);
	// 			}
	// 		}

	// 		// sick ppl
	// 		int val = 0;
	// 		for(int j = 0 ; j < ww[i].S.size() ; j++) {

	// 		}
	// 	}

	// 	else {

	// 	}
	// }
	int dp[n];
	memset(dp, 0, sizeof dp);
	for(int i = 0 ; i < n ; i++) {
		for(int j = 0 ; j < got[i].size() ; j++) {
			dp[got[i][j]] = max(dp[got[i][j]], dp[i]+1);
		}
	}

	cout << dp[ww[0].F-1] << endl;
}

signed main() {
	int t = 1; // cin >> t;
	while(t--) solve();
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...