Submission #1266715

#TimeUsernameProblemLanguageResultExecution timeMemory
1266715altern23Bitaro’s Party (JOI18_bitaro)C++20
0 / 100
2 ms2888 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define pii pair<ll, ll> #define fi first #define sec second #define ld long double const int MAXN = 1e5; const ll INF = 4e18; const int MOD = 998244353; ll dp[MAXN + 5], ans[MAXN + 5]; vector<ll> adj[MAXN + 5]; bitset<100005> bd; struct DSU{ ll N; vector<ll> par; DSU(ll _n){ N = _n; par.resize(N + 5); iota(par.begin(), par.end(), 0LL); } ll find(ll idx){ return par[idx] == idx ? idx : par[idx] = find(par[idx]); } void join(ll a, ll b){ a = find(a), b = find(b); if(a == b) return; par[b] = a; } }; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int tc = 1; // cin >> tc; for(;tc--;){ ll N, M, Q; cin >> N >> M >> Q; vector<ll> adj[N + 5]; for(int i = 1; i <= M; i++){ ll u, v; cin >> u >> v; adj[v].push_back(u); } DSU dsu(N); vector<ll> queries[N + 5], C[Q + 5]; for(int i = 1; i <= Q; i++){ ll T; cin >> T; queries[T].push_back(i); ll X; cin >> X; for(int j = 1; j <= X; j++){ ll val; cin >> val; C[i].push_back(val); } } for(int i = 1; i <= N; i++){ for(auto j : adj[i]){ dp[i] = max(dp[i], dp[j] + 1); dsu.join(i, j); } for(auto j : queries[i]){ for(auto x : C[j]) bd[x] = 1; ans[j] = -1; for(int k = 1; k <= N; k++){ if(dsu.find(i) == dsu.find(k) && !bd[k]) ans[j] = max(ans[j], dp[i] - dp[k]); } for(auto x : C[j]) bd[x] = 0; } } for(int i = 1; i <= Q; i++) cout << ans[i] << "\n"; } } /* */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...