Submission #1158140

#TimeUsernameProblemLanguageResultExecution timeMemory
1158140akzytrBitaro’s Party (JOI18_bitaro)C++20
7 / 100
2099 ms132212 KiB
#include <bits/stdc++.h> #define ve vector #define ar array #define pb push_back #define ins insert #define endl '\n' #define ll long long using namespace std; const int MXN = 1e5+1; ve<int> adj[MXN]; ve<int> restr[MXN]; int blck[MXN]; int ans[MXN]; int from[MXN]; ve<pair<int, int>> madst[MXN+1]; const int BLCK = 100; ll ansgy(ll x, ll i){ priority_queue<pair<int, int>> g; int dst[MXN]; fill(dst, dst+MXN, -1); g.push({0, x}); while(!g.empty()){ auto top = g.top(); g.pop(); if(top.first > dst[top.second]){ dst[top.second] = top.first; for(int i : adj[top.second]){ g.push({1+top.first, i}); } } } int as = -1; for(int j = 0; j < MXN; j++){ if(blck[j] != i){ as = max(as, dst[j]); } } return as; } void populate(ll x){ madst[x].pb({0, x}); ve<int> co; for(int i : adj[x]){ for(auto [dst, y] : madst[i]){ if(from[y] == -1){ co.pb(y); from[y] = dst+1; } else{ from[y] = max(from[y], dst+1); } } } for(int i : co){ madst[x].pb({from[i], i}); from[i] = -1; } sort(madst[x].rbegin(), madst[x].rend()); while(madst[x].size() > BLCK){ madst[x].pop_back(); } } int main(){ fill(ans, ans+MXN, -1); fill(blck, blck+MXN, -1); fill(from, from+MXN, -1); int n, m, q; cin >> n >> m >> q; for(int i = 0; i < m; i++){ int a, b; cin >> a >> b; adj[b].pb(a); } for(int i = 1; i <= n; i++){ populate(i); } for(int i = 0; i < q; i++){ int t; cin >> t; int sz; cin >> sz; for(int j = 0; j < sz; j++){ int y; cin >> y; restr[i].pb(y); blck[y] = i; } if(sz >= BLCK){ ans[i] = ansgy(t, i); } else{ // cout << t << " : " << endl; for(auto [u,v]: madst[t]){ // cout << v << " " << u << endl; if(blck[v] != i){ ans[i] = max(ans[i], u); } } cout << endl; } } for(int i = 0; i < q; i++){ cout << ans[i] << endl; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...