제출 #1318756

#제출 시각아이디문제언어결과실행 시간메모리
1318756exoworldgdBitaro’s Party (JOI18_bitaro)C++20
0 / 100
18 ms7568 KiB
#include <bits/stdc++.h> #define exoworldgd cin.tie(0)->sync_with_stdio(0), cout.tie(0) #define int long long using namespace std; const int inf=LLONG_MAX,mod=1e9+7,N=1e5+5,B=320; int n,m,q,dp[N]; vector<int>g[N]; vector<pair<int,int>>best[N]; signed main(void) { exoworldgd; cin>>n>>m>>q; for(int i=0,u,v;i<m;i++)cin>>u>>v,g[v].push_back(u); for(int i=1;i<=n;i++){ best[i].push_back({0,i}); for(int u:g[i])for(auto [d,v]:best[u])best[i].push_back({d+1,v}); sort(best[i].rbegin(),best[i].rend()); if(best[i].size()>B)best[i].resize(B); } for(int t,y,ans,busy[100005];q--;){ cin>>t>>y,ans=-1,memset(busy,0,sizeof busy); for(int i=0,c;i<y;i++)cin>>c,busy[c]=1; if(y<B)for(auto[d,v]:best[t])if(!busy[v]){ans=d;break;} else{ fill(dp,dp+n+1,-1),dp[t]=0; for(int i=t;i;i--)if(dp[i]^-1)for(int u:g[i])dp[u]=max(dp[u],dp[i]+1); for(int i=1;i<=n;i++)if(!busy[i]&&dp[i]^-1)ans=max(ans,dp[i]); } cout<<ans<<"\n"; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...