Submission #896192

#TimeUsernameProblemLanguageResultExecution timeMemory
896192jay_jayjayBitaro’s Party (JOI18_bitaro)C++14
100 / 100
1012 ms260652 KiB
// {{{1 extern "C" int __lsan_is_turned_off() { return 1; } #include <bits/stdc++.h> using namespace std; #define ll long long #define inf 0x3f3f3f3f #define infl 0x3f3f3f3f3f3f3f3fll #include <assert.h> #ifdef DEBUG #define dprintf(args...) fprintf(stderr,args) #endif #ifndef DEBUG #define dprintf(args...) 69 #endif #define all(x) (x).begin(), (x).end() #pragma GCC optimize("Ofast,unroll-loops") #pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt") #define ll long long #include <stdio.h> #include <stdlib.h> // china io template #define BUFSZ (1<<22) char ibuf[BUFSZ],obuf[BUFSZ]; char* ip=ibuf+BUFSZ, * op=obuf; #define gc() (ip<ibuf+BUFSZ?*ip++:(fread(ip=ibuf,1,BUFSZ,stdin),*ip++)) ll read() { char c; int sgn=0; while((c=gc())<'0')sgn|=c=='-'; ll x=-(c-'0'); while((c=gc())>' ')x=x*10-(c-'0'); return sgn?x:-x; } char* read_str(char* x) { // note no null termination; returns past-end pointer char c; while((c=gc())<=' '); *x++=c; while((c=gc())>' ')*x++=c; return x; } void write_(ll x) { if(x<-9) write_(x/10); *op++=-(x%10)+'0'; } void write(ll x) { if(x<0) return *op++='-',write_(x); write_(-x); } void write_str(char* x) { while((*op++=*x++)); op--; } void flush() { fwrite(obuf,1,op-obuf,stdout), op=obuf; } #ifdef CHINAIO_TEST int main() { ll x=read();write(x); *op++='\n'; flush(); char buf[20]; char* e=read_str(buf); *e++=0; write_str(buf); *op++='\n'; flush(); } #endif // 1}}} struct { operator ll() { return read(); } } in; #define N 200000 vector<int> adj[N]; vector<array<int,2>> best[N]; int vis[N], bes[N]; #define B 300 //#define B 3 int main() { int n=in,m=in,qq=in; while(m--) { int u=in,v=in;u--;v--; adj[v].push_back(u); } //for(int i=n-1;~i;i--) { for(int i=0;i<n;i++){ vector<int> pros; for(auto x:adj[i]) { for(auto [j,d]:best[x]) { if(vis[j]==i) bes[j]=max(bes[j],d+1); else bes[j]=d+1,vis[j]=i,pros.push_back(j); } } pros.push_back(i); bes[i]=0; //sort(all(pros),[&](int a, int b) { return bes[a]>bes[b]; }); int m=min((int)pros.size(),B); nth_element(pros.begin(),pros.begin()+m,pros.end(),[&](int a, int b) { return bes[a]>bes[b]; }); pros.resize(m); best[i].resize(m); for(int j=0;j<m;j++) { best[i][j] = {pros[j],bes[pros[j]]}; //printf("%d:\t%d, %d\n",i,pros[j],bes[pros[j]]); } //printf("\n"); } while(qq--) { int v=in,num=in;v--; //printf("\nquery v=%d num=%d\n",v,num); vector<int> ex(num);for(auto&x:ex)x=in,x--; sort(all(ex)); #define exl(i) ({auto it=lower_bound(all(ex),i); it!=ex.end()&&*it==i;}) if(num >= B) { // 用暴力 vector<int> bes(n,-1); for(int i=0;i<n;i++) { if(!exl(i)) bes[i]=0; for(auto x:adj[i]) if(bes[x]!=-1) bes[i] = max(bes[i],bes[x]+1); } printf("%d\n",bes[v]); } else { int bes=-1; for(auto [i, d] : best[v]) { if(!exl(i)) bes = max(d,bes); //printf("%d, %d (excluded:%d)\n",i,d,exl(i)); } printf("%d\n",bes); } } }

Compilation message (stderr)

bitaro.cpp: In function 'int main()':
bitaro.cpp:103:34: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
  103 |                         for(auto [j,d]:best[x]) {
      |                                  ^
bitaro.cpp:140:34: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
  140 |                         for(auto [i, d] : best[v]) {
      |                                  ^
bitaro.cpp: In function 'long long int read()':
bitaro.cpp:28:41: warning: ignoring return value of 'size_t fread(void*, size_t, size_t, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   28 | #define gc() (ip<ibuf+BUFSZ?*ip++:(fread(ip=ibuf,1,BUFSZ,stdin),*ip++))
      |                                    ~~~~~^~~~~~~~~~~~~~~~~~~~~~~
bitaro.cpp:33:18: note: in expansion of macro 'gc'
   33 |         while((c=gc())<'0')sgn|=c=='-';
      |                  ^~
bitaro.cpp:28:41: warning: ignoring return value of 'size_t fread(void*, size_t, size_t, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   28 | #define gc() (ip<ibuf+BUFSZ?*ip++:(fread(ip=ibuf,1,BUFSZ,stdin),*ip++))
      |                                    ~~~~~^~~~~~~~~~~~~~~~~~~~~~~
bitaro.cpp:35:18: note: in expansion of macro 'gc'
   35 |         while((c=gc())>' ')x=x*10-(c-'0');
      |                  ^~
bitaro.cpp: In function 'char* read_str(char*)':
bitaro.cpp:28:41: warning: ignoring return value of 'size_t fread(void*, size_t, size_t, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   28 | #define gc() (ip<ibuf+BUFSZ?*ip++:(fread(ip=ibuf,1,BUFSZ,stdin),*ip++))
      |                                    ~~~~~^~~~~~~~~~~~~~~~~~~~~~~
bitaro.cpp:40:18: note: in expansion of macro 'gc'
   40 |         while((c=gc())<=' ');
      |                  ^~
bitaro.cpp:28:41: warning: ignoring return value of 'size_t fread(void*, size_t, size_t, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   28 | #define gc() (ip<ibuf+BUFSZ?*ip++:(fread(ip=ibuf,1,BUFSZ,stdin),*ip++))
      |                                    ~~~~~^~~~~~~~~~~~~~~~~~~~~~~
bitaro.cpp:42:18: note: in expansion of macro 'gc'
   42 |         while((c=gc())>' ')*x++=c;
      |                  ^~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...