제출 #521167

#제출 시각아이디문제언어결과실행 시간메모리
521167CyberSleeperBitaro’s Party (JOI18_bitaro)C++14
100 / 100
1131 ms269276 KiB
#include <bits/stdc++.h> #define fastio ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL) #define debug(x) cout << "Line " << __LINE__ << ", " << #x << " is " << x << endl #define all(x) x.begin(), x.end() #define fi first #define se second #define mp make_pair #define pb push_back #define ll long long #define vll vector<ll> #define ull unsigned long long #define pll pair<ll, ll> #define pii pair<int, int> #define ld long double #define nl '\n' #define tb '\t' #define sp ' ' using namespace std; const int MX=100005, MOD=998244353, BLOCK=327, INF=2e9+7; const ll INFF=1e18+7; const ld ERR=1e-7, pi=3.14159265358979323846; int N, M, Q, vis[MX], cnt, DP[MX]; vector<int> adj[MX], C; vector<pii> far[MX]; void comb(int x, int y){ cnt++; vector<pii> ret; int lex=0, ley=0; while(ret.size()<BLOCK && lex<far[x].size() && ley<far[y].size()){ pii le=far[x][lex], ri=far[y][ley]; le.fi++; if(le >= ri){ ret.pb(le); vis[le.se]=cnt; lex++; }else{ ret.pb(ri); vis[ri.se]=cnt; ley++; } while(lex<far[x].size() && vis[far[x][lex].se] == cnt) lex++; while(ley<far[y].size() && vis[far[y][ley].se] == cnt) ley++; } while(ret.size()<BLOCK && lex<far[x].size()){ if(vis[far[x][lex].se] != cnt){ ret.pb(far[x][lex]); ret.back().fi++; } lex++; } while(ret.size()<BLOCK && ley<far[y].size()){ if(vis[far[y][ley].se] != cnt) ret.pb(far[y][ley]); ley++; } far[y]=ret; } int main() { fastio; cin >> N >> M >> Q; for(int i=0, u, v; i<M; i++){ cin >> u >> v; adj[v].pb(u); } for(int i=1; i<=N; i++){ far[i].pb({0, i}); for(auto j:adj[i]){ comb(j, i); } } memset(vis, -1, sizeof(vis)); while(Q--){ int X, Y; cin >> X >> Y; for(int i=Y, x; i>0; i--){ cin >> x; if(x>X){ Y--; }else{ vis[x]=Q; } } if(Y==X){ cout << "-1\n"; continue; } if(Y<BLOCK){ for(auto i:far[X]){ if(vis[i.se] != Q){ cout << i.fi << nl; X=-1; break; } } if(X != -1) cout << "-1\n"; }else{ for(int i=1; i<=X; i++){ DP[i]=(vis[i]==Q ? -INF : 0); for(auto j:adj[i]){ DP[i]=max(DP[j]+1, DP[i]); } } if(DP[X]<0) DP[X]=-1; cout << DP[X] << nl; } } }

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

bitaro.cpp: In function 'void comb(int, int)':
bitaro.cpp:32:34: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   32 |     while(ret.size()<BLOCK && lex<far[x].size() && ley<far[y].size()){
      |                               ~~~^~~~~~~~~~~~~~
bitaro.cpp:32:55: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   32 |     while(ret.size()<BLOCK && lex<far[x].size() && ley<far[y].size()){
      |                                                    ~~~^~~~~~~~~~~~~~
bitaro.cpp:44:18: 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(lex<far[x].size() && vis[far[x][lex].se] == cnt)
      |               ~~~^~~~~~~~~~~~~~
bitaro.cpp:46:18: 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 |         while(ley<far[y].size() && vis[far[y][ley].se] == cnt)
      |               ~~~^~~~~~~~~~~~~~
bitaro.cpp:49:34: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   49 |     while(ret.size()<BLOCK && lex<far[x].size()){
      |                               ~~~^~~~~~~~~~~~~~
bitaro.cpp:56:34: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   56 |     while(ret.size()<BLOCK && ley<far[y].size()){
      |                               ~~~^~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...