Submission #743241

#TimeUsernameProblemLanguageResultExecution timeMemory
743241Azther0zBitaro’s Party (JOI18_bitaro)C++11
100 / 100
1271 ms215080 KiB
#include <bits/stdc++.h> using namespace std; const int B=150; vector<vector<int>> adjl(100001); vector<vector<pair<int,int>>> far(100001); vector<int> visited(100001,0),val(100001,0); bitset<100001> busy; bool cmp(int x,int y) { return val[x]>val[y]; } int main() { int n,m,q; scanf("%d%d%d",&n,&m,&q); while(m--) { int a,b; scanf("%d%d",&a,&b); adjl[b].push_back(a); } for(int i=1;i<=n;i++) { vector<int> all; for(auto j:adjl[i]) { for(auto f:far[j]) { if(visited[f.second]!=i) { visited[f.second]=i; all.push_back(f.second); val[f.second]=f.first+1; } else { val[f.second]=max(val[f.second],f.first+1); } } if(visited[j]!=i) { visited[j]=i; all.push_back(j); val[j]=1; } } all.push_back(i); sort(all.begin(),all.end(),cmp); for(int j=0;j<min((int)all.size(),B);j++) far[i].push_back({val[all[j]],all[j]}); } while(q--) { busy=0; int a,b,c; scanf("%d%d",&a,&b); for(int i=0;i<b;i++) { scanf("%d",&c); busy[c]=true; } if(b>=B) { vector<int> dp(n+1,-1); for(int i=1;i<=a;i++) { if(!busy[i]) dp[i]=max(dp[i],0); for(auto next:adjl[i]) if(dp[next]!=-1) dp[i]=max(dp[i],dp[next]+1); } printf("%d\n",dp[a]); } else { bool check=false; for(auto f:far[a]) { if(!busy[f.second]) { printf("%d\n",f.first); check=true; break; } } if(!check) printf("-1\n"); } } }

Compilation message (stderr)

bitaro.cpp: In function 'int main()':
bitaro.cpp:15:7: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   15 |  scanf("%d%d%d",&n,&m,&q);
      |  ~~~~~^~~~~~~~~~~~~~~~~~~
bitaro.cpp:19:8: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   19 |   scanf("%d%d",&a,&b);
      |   ~~~~~^~~~~~~~~~~~~~
bitaro.cpp:56:8: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   56 |   scanf("%d%d",&a,&b);
      |   ~~~~~^~~~~~~~~~~~~~
bitaro.cpp:59:9: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   59 |    scanf("%d",&c);
      |    ~~~~~^~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...