제출 #1151574

#제출 시각아이디문제언어결과실행 시간메모리
1151574Robert_juniorJoker (BOI20_joker)C++20
49 / 100
2095 ms43792 KiB
#include<bits/stdc++.h>
using namespace std;
#define all(x) x.begin(), x.end()
#define ins insert
#define pb push_back
#define F first
#define S second
const int N = 2e5+100, M = 5e5 + 7;
const int mod = 1e9 + 7;
int pr[N], sz[N], f[N], l[N], r[N], ql[N], qr[N];
bool res[201][N], ans;
int get(int v){
    if(pr[v] == v) return v;
    else return get(pr[v]);
}
int get1(int v){
    if(pr[v] == v) return f[v];
    else return (get1(pr[v]) ^ f[v]);
}
void unite(int u, int v){
    int a = get(u), b = get(v);
    int f1 = get1(u), f2 = (get1(v));
    if(a == b){
        if(f1 == f2) ans = 1;
    }
    else{
        if(sz[a] < sz[b]){
            swap(a, b);
        }
        sz[a] += sz[b];
        pr[b] = a;
        sz[b] = 0;
        if(f1 == f2) f[b] ^= 1;
    }
}
void solve(){
    int n, m, q;
    cin>>n>>m>>q;
    for(int i = 1; i <= m; i++){
        cin>>l[i]>>r[i];
    }
    for(int i = 1; i <= min(200, m); i++){
        for(int j = 1; j <= n; j++){
            sz[j] = 1;
            pr[j] = j;
            f[j] = 0;
        }
        ans = 0;
        for(int j = i - 1; j >= 1; j--){
            unite(l[j], r[j]);
        }
        for(int j = m; j >= i; j--){
            if(ans){
                res[i][j] = 1;
                continue;
            }
            unite(l[j], r[j]);
        }
    }
    for(int i = 1; i <= q; i++){
        cin>>ql[i]>>qr[i];
        if(ql[i] <= 200){
            if(res[ql[i]][qr[i]]){
                cout<<"YES\n";
            }
            else{
                cout<<"NO\n";
            }
        }
        else{
            for(int j = 1; j <= n; j++){
                sz[j] = 1;
                pr[j] = j;
                f[j] = 0;
            }
            ans = 0;
            for(int j = 1; j <= m; j++){
                if(ql[i] <= j && j <= qr[i]) continue;
                unite(l[j], r[j]);
            }
            if(ans) cout<<"YES\n";
            else cout<<"NO\n";
        }
    }
}
main(){
    ios_base :: sync_with_stdio(false);
    cin.tie(nullptr);
    int t = 1;
    //cin>>t; 
    for(int i = 1; i <= t; i++){
        //cout<<"Case "<<i<<": ";
        solve();
    }
}

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

Joker.cpp:86:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   86 | main(){
      | ^~~~
#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...