| # | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
|---|---|---|---|---|---|---|---|
| 1338415 | JPEGraid | Bitaro’s Party (JOI18_bitaro) | C++20 | 0 ms | 0 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[j]] = max(dp[got[j]], dp[i]+1);
}
}
cout << dp[ww[0].F-1] << endl;
}
signed main() {
int t = 1; // cin >> t;
while(t--) solve();
}