Submission #1112144

#TimeUsernameProblemLanguageResultExecution timeMemory
1112144vjudge1Bitaro’s Party (JOI18_bitaro)C++17
100 / 100
1382 ms299388 KiB
#include<bits/stdc++.h> using namespace std; #define pb push_back #define fi first #define se second #define for1(i,j,k) for(int i=j;i<=k;i++) #define for2(i,j,k) for(int i=j;i>=k;i--) #define for3(i,j,k,l) for(int i=j;i<=k;i+=l) #define all(x) x.begin(),x.end() //#define int long long typedef long long ll; typedef pair<int,int> pii; typedef double db; const ll maxn=2e5+69; const ll offset=2e5; const ll inf=1e9; const int base=350; const ll mod=1e9+7; vector<int> adj[maxn],adj_r[maxn]; vector<pii> Lx,L[maxn]; bool dd[maxn]; int n,m,q; int deg[maxn]; queue<int> Q; int x[maxn],dep[maxn]; void Merge(vector<pii>& Lu,vector<pii> Lv,bool debug=0) { for(pii& x:Lv) x.fi++; int i=0,j=0; Lx.clear(); while (i<Lu.size() || j<Lv.size()) { if (j==Lv.size()) { if (!dd[Lu[i].se] && Lx.size()<base) { Lx.pb(Lu[i]); dd[Lu[i].se]=1; } i++; } else if (i==Lu.size() || Lu[i]<Lv[j]) { if (!dd[Lv[j].se] && Lx.size()<base) { Lx.pb(Lv[j]); dd[Lv[j].se]=1; } j++; } else { if (!dd[Lu[i].se] && Lx.size()<base) { Lx.pb(Lu[i]); dd[Lu[i].se]=1; } i++; } } Lu=Lx; for(pii x:Lu) dd[x.se]=0; } void dfs_dag() { for1(u,1,n) deg[u]=adj_r[u].size(); for1(u,1,n) if (!deg[u]) Q.push(u); for1(u,1,n) dep[u]=0; for1(u,1,n) if (dd[u]) dep[u]=-inf; while (!Q.empty()) { int u=Q.front(); Q.pop(); // cerr<< u<< ' '<<dep[u]<<'\n'; for(int v:adj[u]) { dep[v]=max(dep[v],dep[u]+1); deg[v]--; if (!deg[v]) Q.push(v); } } } void sol() { cin >> n>> m>> q; for1(i,1,m) { int u,v;cin >> u>>v; adj[u].pb(v); adj_r[v].pb(u); } for1(u,1,n) deg[u]=adj_r[u].size(); for1(u,1,n) if (!deg[u]) Q.push(u); while (!Q.empty()) { int u=Q.front(); Q.pop(); L[u].pb({0,u}); for(int v: adj_r[u]) { Merge(L[u],L[v]); } for(int v:adj[u]) { deg[v]--; if (!deg[v]) Q.push(v); } } // for1(u,1,n) // { // cerr<<"list "<<u<<":\n"; // for(pii v:L[u]) cerr<<v.se<<' '<<v.fi<<'\n'; // cerr<<'\n'; // } for1(i,1,q) { int u,nn;cin >>u>> nn; for1(i,1,nn) { cin >> x[i]; dd[x[i]]=1; } int res=-1; if (nn<base) { for(pii x:L[u]) { if (!dd[x.se]) { res=x.fi; break; } } cout << res<<'\n'; } else { dfs_dag(); // cerr<< "ac\n"; if (dep[u]<0) cout << "-1\n"; else cout << dep[u]<<'\n'; } for1(i,1,nn) dd[x[i]]=0; } } int32_t main() { ios_base::sync_with_stdio(false); cin.tie(NULL); // freopen("aacd.inp","r",stdin); // freopen("aacd.out","w",stdout); int t=1;//cin >> t; for1(i,1,t) { // cout << "Case #"<<i<<": "; sol(); } } /* 5 6 1 1 2 2 4 3 4 1 3 3 5 4 5 4 1 1 */

Compilation message (stderr)

bitaro.cpp: In function 'void Merge(std::vector<std::pair<int, int> >&, std::vector<std::pair<int, int> >, bool)':
bitaro.cpp:35: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]
   35 |     while (i<Lu.size() || j<Lv.size())
      |            ~^~~~~~~~~~
bitaro.cpp:35:28: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   35 |     while (i<Lu.size() || j<Lv.size())
      |                           ~^~~~~~~~~~
bitaro.cpp:37:14: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   37 |         if (j==Lv.size())
      |             ~^~~~~~~~~~~
bitaro.cpp:46:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   46 |         else if (i==Lu.size() || Lu[i]<Lv[j])
      |                  ~^~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...