Submission #1084905

#TimeUsernameProblemLanguageResultExecution timeMemory
1084905mrwangBitaro’s Party (JOI18_bitaro)C++14
100 / 100
1342 ms420812 KiB
#include<bits/stdc++.h> using namespace std; #define ll long long #define pii pair<int,int> #define pll pair<ll,ll> #define fi first #define se second const int maxN=1e5+5; const ll inf=2e18; int n,m,q,dp[maxN+1],block,a[maxN+1],cnt[maxN+1]; vector<int> adj[maxN+1],topo; vector<pii> vec[maxN+1]; bool vis[maxN+1]; void dfs(int u) { vis[u]=true; for(auto v:adj[u]) { if(!vis[v]) { dfs(v); } } topo.push_back(u); } void meg(int u,int v) { vector<pii> vt; int i=0,j=0; for(auto i:vec[u]) { vis[i.fi]=false; } for(auto i:vec[v]) { vis[i.fi]=false; } while(i<vec[u].size()&&j<vec[v].size()&&vt.size()<block) { while(i<vec[u].size()&&vis[vec[u][i].fi]) { i++; } while(j<vec[v].size()&&vis[vec[v][j].fi]) { j++; } if(i>=vec[u].size()||j>=vec[v].size()) { break; } int p1=vec[u][i].se,p2=vec[v][j].se; if(p1+1>p2) { vt.push_back({vec[u][i].fi,p1+1}); vis[vec[u][i].fi]=true; i++; } else { vt.push_back({vec[v][j].fi,p2}); vis[vec[v][j].fi]=true; j++; } } while(i<vec[u].size()&&vt.size()<block) { while(i<vec[u].size()&&vis[vec[u][i].fi]) { i++; } if(i>=vec[u].size()) { break; } vt.push_back({vec[u][i].fi,vec[u][i].se+1}); i++; } while(j<vec[v].size()&&vt.size()<block) { while(j<vec[v].size()&&vis[vec[v][j].fi]) { j++; } if(j>=vec[v].size()) { break; } vt.push_back({vec[v][j].fi,vec[v][j].se}); j++; } swap(vec[v],vt); } void make() { for(auto u:topo) { vec[u].push_back({u,0}); for(auto v:adj[u]) { //cout<<u<<" "<<v<<'\n'; meg(u,v); } } } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>n>>m>>q; for(int i=1;i<=m;i++) { int u,v; cin>>u>>v; adj[u].push_back(v); } block=sqrt(n); for(int i=1;i<=n;i++) { if(!vis[i]) { dfs(i); } } memset(dp,0,sizeof(dp)); reverse(topo.begin(),topo.end()); make(); while(q--) { int t,y; cin>>t>>y; if(y>=block) { for(int i=1;i<=n;i++) { dp[i]=0; } } for(int i=1;i<=y;i++) { int u; cin>>u; a[i]=u; dp[u]=INT_MIN; if(y<block) { cnt[u]++; } } if(y>=block) { for(auto u:topo) { for(auto v:adj[u]) { dp[v]=max(dp[v],dp[u]+1); } } if(dp[t]<0) { cout<<-1; } else cout<<dp[t]; } else { int ans=-1; for(auto u:vec[t]) { if(!cnt[u.fi]) { ans=u.se; break; } } cout<<ans; } cout<<'\n'; for(int i=1;i<=y;i++) { cnt[a[i]]=0; } } }

Compilation message (stderr)

bitaro.cpp: In function 'void meg(int, int)':
bitaro.cpp:38:12: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   38 |     while(i<vec[u].size()&&j<vec[v].size()&&vt.size()<block)
      |           ~^~~~~~~~~~~~~~
bitaro.cpp:38:29: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   38 |     while(i<vec[u].size()&&j<vec[v].size()&&vt.size()<block)
      |                            ~^~~~~~~~~~~~~~
bitaro.cpp:38:54: warning: comparison of integer expressions of different signedness: 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   38 |     while(i<vec[u].size()&&j<vec[v].size()&&vt.size()<block)
      |                                             ~~~~~~~~~^~~~~~
bitaro.cpp:40:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   40 |         while(i<vec[u].size()&&vis[vec[u][i].fi])
      |               ~^~~~~~~~~~~~~~
bitaro.cpp:44:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   44 |         while(j<vec[v].size()&&vis[vec[v][j].fi])
      |               ~^~~~~~~~~~~~~~
bitaro.cpp:48:13: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   48 |         if(i>=vec[u].size()||j>=vec[v].size())
      |            ~^~~~~~~~~~~~~~~
bitaro.cpp:48:31: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   48 |         if(i>=vec[u].size()||j>=vec[v].size())
      |                              ~^~~~~~~~~~~~~~~
bitaro.cpp:66:12: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   66 |     while(i<vec[u].size()&&vt.size()<block)
      |           ~^~~~~~~~~~~~~~
bitaro.cpp:66:37: warning: comparison of integer expressions of different signedness: 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   66 |     while(i<vec[u].size()&&vt.size()<block)
      |                            ~~~~~~~~~^~~~~~
bitaro.cpp:68:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   68 |         while(i<vec[u].size()&&vis[vec[u][i].fi])
      |               ~^~~~~~~~~~~~~~
bitaro.cpp:72:13: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   72 |         if(i>=vec[u].size())
      |            ~^~~~~~~~~~~~~~~
bitaro.cpp:79:12: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   79 |     while(j<vec[v].size()&&vt.size()<block)
      |           ~^~~~~~~~~~~~~~
bitaro.cpp:79:37: warning: comparison of integer expressions of different signedness: 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   79 |     while(j<vec[v].size()&&vt.size()<block)
      |                            ~~~~~~~~~^~~~~~
bitaro.cpp:81:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   81 |         while(j<vec[v].size()&&vis[vec[v][j].fi])
      |               ~^~~~~~~~~~~~~~
bitaro.cpp:85:13: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   85 |         if(j>=vec[v].size())
      |            ~^~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...