제출 #1033165

#제출 시각아이디문제언어결과실행 시간메모리
1033165vjudge1Joker (BOI20_joker)C++17
49 / 100
1144 ms18608 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define ll long long #define ar array #define ld long double const int N = 3e5 + 20; const int B = 400; const int M = 200; const int INF = 1e15; const int LOG = 24; const int MOD = 998244353; #pragma GCC optimize("O3,unroll-loops") #pragma GCC target("avx,bmi,bmi2,lzcnt,popcnt") struct DSU{ vector<int> p; vector<int> c; vector<int> sz; vector<int> bi; DSU(int n){ p.clear(); sz.clear(); bi.clear(); c.clear(); p.resize(n); sz.resize(n, 1); bi.resize(n, 1); c.resize(n, 0); for(int i = 0;i < n;i++)p[i] = i; } ar<int,2 > find(int x){ if(x == p[x])return {x, c[x]}; ar<int,2 > q = find(p[x]); return {q[0], q[1] ^ c[x]}; } //vector<pair<int&, int> > rb; bool join(int a,int b){ ar<int, 2> pa = find(a); ar<int, 2> pb = find(b); a = pa[0]; b = pb[0]; int ca = pa[1]; int cb = pb[1]; //rb.push_back({p[a], p[a]}); //rb.push_back({sz[a], sz[a]}); //rb.push_back({bi[a], bi[a]}); //rb.push_back({c[a], c[a]}); //rb.push_back({p[b], p[b]}); //rb.push_back({sz[b], sz[b]}); //rb.push_back({bi[b], bi[b]}); //rb.push_back({c[b], c[b]}); if(a == b){ if(ca == cb)bi[a] = 0; return 0; } if(sz[a] < sz[b])swap(a, b), swap(ca, cb); sz[a] += sz[b]; p[b] = a; c[b] = cb ^ ca ^ 1; bi[a] &= bi[b]; return 1; } inline bool bip(int x){ return bi[find(x)[0]]; } /* bool roll(){ if(rb.empty())return 0; for(int i = 0;i < 8;i++){ rb.back().first = rb.back().second; rb.pop_back(); } return 1; } */ }; vector<ar<int, 2> > que[M]; signed main(){ios_base::sync_with_stdio(false);cin.tie(0); int n, m, q; cin>>n>>m>>q; ar<int, 2> e[m]; for(int i = 0;i < m;i++){ int u, v; cin>>u>>v; --u, --v; e[i] = {u, v}; } if(n <= 2000 && m <= 2000 && q <= 2000){ while(q--){ int l, r; cin>>l>>r; --l, --r; DSU d(n); bool ans = 1; for(int i = 0;i < m;i++){ if(l <= i && i <= r)continue; d.join(e[i][0], e[i][1]); if(!d.bip(e[i][0])){ ans = 0; break; } } cout<< (ans ? "NO\n" : "YES\n"); } return 0; } for(int i = 0;i < q;i++){ int l, r; cin>>l>>r; --l, --r; que[l].push_back({r, i}); } bitset<N> res; for(int l = 0;l < M;l++){ if(que[l].empty())continue; sort(que[l].rbegin(), que[l].rend()); DSU d(n); bool ans = 1; for(int i = 0;i < l;i++){ d.join(e[i][0], e[i][1]); if(!d.bip(e[i][0]))ans = 0; } int p = 0; for(int i = m - 1;i >= 0 && ans;i--){ while(p < que[l].size() && que[l][p][0] == i){ res[que[l][p][1]] = ans; ++p; } d.join(e[i][0], e[i][1]); if(!d.bip(e[i][0]))ans = 0; } } for(int i = 0;i < q;i++)cout<<(res[i] ? "NO\n" : "YES\n"); }

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

Joker.cpp: In function 'int main()':
Joker.cpp:142:12: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::array<long long int, 2> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  142 |    while(p < que[l].size() && que[l][p][0] == i){
      |          ~~^~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...