Submission #349983

#TimeUsernameProblemLanguageResultExecution timeMemory
349983soroushBitaro’s Party (JOI18_bitaro)C++17
100 / 100
1977 ms120044 KiB
//#pragma comment(linker, "/stack:200000000") //#pragma GCC optimize("Ofast") //#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx") #include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int , int> pii; const int maxn = 1e5 + 10; const int sq = 100; const int inf = 2e9; #define pb push_back #define endl '\n' #define dokme(x) cout << x , exit(0) #define migmig ios::sync_with_stdio(false),cin.tie(0),cout.tie(0) #define ms(x , y) memset(x , y , sizeof x) vector < int > adj[maxn], radj[maxn]; vector < pii > vec[maxn]; bool nt[maxn] , c[maxn]; int n , m , q , d[maxn]; int solve(int v){ for(int i = 1 ; i < v ; i ++) d[i] = -inf; d[v] = 0; for(int i = v - 1; i >= 1 ; i --) for(auto u : adj[i]) if(u <= v) d[i] = max(d[i] , d[u] + 1); int ans = -1; for(int i = 1 ; i <= v ; i ++) if(!nt[i]) ans = max(ans , d[i]); return(ans); } vector < pii > vc; void prep(){ for(int i = 1 ; i <= n ; i ++){ vc.clear(); vc.pb({0 , i}); for(auto u : radj[i]) for(auto x : vec[u]) vc.pb({-x.first - 1 , x.second}); sort(vc.begin() , vc.end()); for(auto x : vc){ if(c[x.second])continue; vec[i].pb({-x.first , x.second}); if(vec[i].size() == sq)break; c[x.second] = 1; } for(auto x : vec[i]) c[x.second] = 0; } } int32_t main(){ migmig; cin >> n >> m >> q; for(int i = 0 ; i < m ; i ++){ int u , v; cin >> u >> v; adj[u].pb(v) , radj[v].pb(u); } prep(); for(int i =1 ; i <= q ; i ++){ int u , v; cin >> u >> v; vector < int > cur; for(int j = 0 ; j < v ; j ++){ int x; cin >> x; cur.pb(x); nt[x] = 1; } if(v >= sq){ cout << solve(u) << endl; for(auto x : cur) nt[x] = 0; continue; } int ans = -1; for(auto x : vec[u]){ if(nt[x.second])continue; ans = x.first; break; } if(ans == -1){ cout << solve(u) << endl; for(int x : cur) nt[x] = 0; continue; } cout << ans << endl; for(int x : cur) nt[x] = 0; } return(0); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...