Submission #69640

#TimeUsernameProblemLanguageResultExecution timeMemory
69640yogahmadBitaro’s Party (JOI18_bitaro)C++14
14 / 100
2055 ms427296 KiB
#include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> using namespace std; using namespace __gnu_pbds; #define fbo find_by_order #define ook order_of_key #define f first #define s second #define pb push_back #define reset(a,b) memset(a,b,sizeof a); #define MOD 1000000007 #define MID (l+r)/2 #define ALL(x) x.begin(),x.end() #define debug(x) cout<<#x<<" = "<<(x)<<endl #define mx 100003 #define pc(x) putchar_unlocked(x); typedef tree<long long, null_type, less<long long>, rb_tree_tag, tree_order_statistics_node_update> pbds; const int batas=330; int n,m,q,u,v,t[mx],y[mx],di[mx],dp[mx],ans[mx]; vector<int>ve[mx],isi[mx],b[mx],g[mx]; vector<pair<int,int>>jauh[mx]; bool sudah[mx],ya[mx]; int sem=0; int main(){ scanf("%d%d%d",&n,&m,&q); for(int i=1;i<=m;i++){ scanf("%d%d",&u,&v); g[u].pb(v); b[v].pb(u); } for(int i=1;i<=q;i++){ cin>>t[i]>>y[i]; for(int j=1;j<=y[i];j++){ int x; cin>>x; ve[i].pb(x); } isi[t[i]].pb(i); } reset(dp,-1); for(int i=1;i<=n;i++){ for(int j:b[i]){ di[j]=0; } while(jauh[i].size()<batas+10){ int ambil=-1,brp=-1; for(int j:b[i]){ while(di[j]<jauh[j].size() && sudah[jauh[j][di[j]].s])di[j]++; if(di[j]==jauh[j].size())continue; if(brp<jauh[j][di[j]].f){ brp=jauh[j][di[j]].f; ambil=j; } } if(ambil==-1)break; int j=ambil; jauh[i].pb({brp+1,jauh[j][di[j]].s}); sudah[jauh[j][di[j]].s]=true; di[j]++; } jauh[i].pb({0,i}); for(auto x:jauh[i]){ sudah[x.s]=false; } for(int x:isi[i]){ if(y[x]>=batas){ for(int j:ve[x])ya[j]=true; dp[i]=0; for(int j=i-1;j>=1;j--){ for(int k:g[j]){ if(dp[k]!=-1)dp[j]=max(dp[j],dp[k]+1); } } int aa=-1; for(int j=1;j<=i;j++){ if(!ya[j])aa=max(aa,dp[j]); } ans[x]=aa; for(int j=1;j<=i;j++){ dp[j]=-1; } for(int j:ve[x])ya[j]=false; } else{ //debug(x); for(int j:ve[x])ya[j]=true; int aa=-1; for(auto j:jauh[i]){ if(i==2){ // cout<<"INI "<<j.f<<" "<<j.s<<endl; } if(!ya[j.s]){ aa=j.f; break; } } ans[x]=aa; for(int j:ve[x])ya[j]=false; } } } for(int i=1;i<=q;i++)printf("%d\n",ans[i]); }

Compilation message (stderr)

bitaro.cpp: In function 'int main()':
bitaro.cpp:52:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     while(di[j]<jauh[j].size() && sudah[jauh[j][di[j]].s])di[j]++;
           ~~~~~^~~~~~~~~~~~~~~
bitaro.cpp:53:13: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     if(di[j]==jauh[j].size())continue;
        ~~~~~^~~~~~~~~~~~~~~~
bitaro.cpp:29:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d%d%d",&n,&m,&q);
  ~~~~~^~~~~~~~~~~~~~~~~~~
bitaro.cpp:31:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d%d",&u,&v);
   ~~~~~^~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...