제출 #480442

#제출 시각아이디문제언어결과실행 시간메모리
480442MohammadAghilBitaro’s Party (JOI18_bitaro)C++14
100 / 100
1641 ms118992 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int, int> pp; #define rep(i,l,r) for(int i = (l); i < r; i++) #define per(i,r,l) for(int i = (r); i >= l; i--) #define all(x) x.begin(), x.end() #define sz(x) (int)(x).size() #define pb push_back #define ff first #define ss second const ll mod = 1e9 + 7, maxn = 2e5 + 5, maxlg = 21, inf = 1e9 + 5; int sq = 100; vector<int> adj[maxn]; vector<pp> best[maxn]; bool is[maxn]; int main(){ cin.tie(0) -> sync_with_stdio(0); int n, m, q; cin >> n >> m >> q; rep(i,0,m){ int u, v; cin >> u >> v; u--, v--; adj[v].pb(u); } rep(i,0,n){ vector<pp> a; a.pb(pp(-1, i)); for(int r: adj[i]){ for(pp c: best[r]){ a.pb(c); } } sort(all(a)); reverse(all(a)); for(pp c: a){ if(!is[c.ss]){ is[c.ss] = true; c.ff++; best[i].pb(c); } if(sz(best[i]) == sq) break; } for(pp c: best[i]) is[c.ss] = false; } while(q--){ int t, c; cin >> t >> c; vector<int> city; rep(i,0,c){ int r; cin >> r; r--; city.pb(r); is[r] = true; } if(c < sq){ for(auto p: best[t - 1]){ if(!is[p.ss]){ cout << p.ff << '\n'; goto hell; } } cout << -1 << '\n'; hell:; }else{ vector<int> dp(t, -inf); dp[t-1] = 0; per(i,t-1,0){ for(int p: adj[i]){ dp[p] = max(dp[i] + 1, dp[p]); } } int mx = -1; rep(i,0,t){ if(!is[i]) mx = max(mx, dp[i]); } cout << mx << '\n'; } for(int r: city) is[r] = false; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...