제출 #1274213

#제출 시각아이디문제언어결과실행 시간메모리
1274213nthvnBitaro’s Party (JOI18_bitaro)C++20
100 / 100
1282 ms171628 KiB
#include "bits/stdc++.h" using namespace std; #define LOG(n) (63 - __builtin_clzll((n))) #define fi first #define se second #define pii pair<int,int> #define all(x) x.begin(), x.end() #define sz(x) (int)x.size() #define pb push_back #define ll long long const int N = 2e5+5; const int S = 100; int n,m,q; vector<int> g[N]; pii f[N][S+5]; int dp[N]; bool ban[N]; void mg(pii a[], pii b[]){ static pii t[2*S+5]; int l = 1, r=1; int st=0; while(l<=S&&r<=S){ if(a[l].fi>b[r].fi+1){ t[++st] = a[l++]; } else t[++st] = {b[r].fi+1, b[r].se}, r++; } while(l<=S){ t[++st] = a[l++]; } while(r<=S){ t[++st] = {b[r].fi+1, b[r].se}; r++; } unordered_set<int> uni; for(int i=1, pt =0;i<= st;i++){ if(uni.count(t[i].se)) continue; uni.insert(t[i].se); a[++pt] = t[i]; if(pt==S) break; } } void preprocess(){ fill_n(&f[0][0],sizeof(f)/sizeof(f[0][0]), make_pair(-1e9,-1)); for(int u=1;u<=n;u++) f[u][1] = {0,u}; for(int u=1;u<=n;u++){ for(auto &v: g[u]){ mg(f[v], f[u]); } } // for(int i=1;i<=5;i++) cerr<<f[2][i].fi<<" "<<f[2][i].se<<"\n"; } signed main(){ ios_base::sync_with_stdio(NULL); cin.tie(NULL); if(fopen("TASK.INP", "r")){ freopen("TASK.INP", "r", stdin); freopen("TASK.OUT", "w", stdout); } cin>>n>>m>>q; for(int i=1;i<=m;i++){ int u,v; cin>>u>>v; g[u].pb(v); } preprocess(); while(q--){ int t,y; cin>>t>>y; static int qr[N]; for(int i=1;i<=y;i++){ cin>>qr[i]; ban[qr[i]] = true; } if(y>=S){ memset(dp,-1,sizeof(dp)); dp[t]= 0; int ans = ban[t]? -1: 0; for(int i=t-1;i>=1;i--){ for(auto &v: g[i]){ if(dp[v]==-1) continue; dp[i] = max(dp[i], dp[v]+1); } if(dp[i]!=-1){ if(!ban[i]) ans = max(ans, dp[i]); } } cout<<ans<<"\n"; } else{ bool flag = false; for(int i=1;i<=S;i++){ if(f[t][i].se==-1) break; if(!ban[f[t][i].se]) { cout<<f[t][i].fi<<"\n"; flag = true; break; } } if(!flag) cout<<-1<<"\n"; } for(int i=1;i<=y;i++) ban[qr[i]] = false; } }

컴파일 시 표준 에러 (stderr) 메시지

bitaro.cpp: In function 'int main()':
bitaro.cpp:64:24: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   64 |                 freopen("TASK.INP", "r", stdin);
      |                 ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
bitaro.cpp:65:24: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   65 |                 freopen("TASK.OUT", "w", stdout);
      |                 ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...