Submission #256093

# Submission time Handle Problem Language Result Execution time Memory
256093 2020-08-02T09:42:33 Z 문홍윤(#5033) Joker (BOI20_joker) C++17
0 / 100
2 ms 3456 KB
#include <bits/stdc++.h>
#define pb emplace_back
#define mp make_pair
#define F first
#define S second
using namespace std;
typedef long long LL;
typedef pair<int, int> pii;

struct UNION_FIND{
    int par[400010], sz[400010];
    vector<int> vc;
    UNION_FIND(){for(int i=1; i<=400000; i++)par[i]=i, sz[i]=1;}
    int findpar(int num){return num==par[num]?num:findpar(par[num]);}
    void mergepar(int a, int b){
        a=findpar(a);
        b=findpar(b);
        if(a==b)return;
        if(sz[a]<sz[b])swap(a, b);
        vc.pb(b);
        par[b]=a;
        sz[a]+=sz[b];
    }
    void rollback(){
        int tmp=vc.back();
        vc.pop_back();
        sz[par[tmp]]-=sz[tmp];
        par[tmp]=tmp;
    }
}uf;

int n, m, q, ans[200010], l, r;
pii edg[200010];

int link(int a, int b){
    uf.mergepar(2*a-1, 2*b);
    uf.mergepar(2*a, 2*b-1);
    if(uf.findpar(2*a)==uf.findpar(2*a-1))return 1;
    return 0;
}

void dnc(int sa, int ea, int sb, int eb){
    if(sa>ea)return;
    int mid=(sa+ea)/2;
    int tmp1=uf.vc.size();
    int flg=0;
    for(int i=l+1; i<=mid; i++)flg=max(flg, link(edg[i].F, edg[i].S));
    l=mid;
    int tmp2=uf.vc.size();
    if(!flg){
        for(int i=r-1; i>l&&i>=sb; i++){
            int sz=uf.vc.size();
            int tmp=link(edg[i].F, edg[i].S);
            if(tmp){
                while(sz<uf.vc.size())uf.rollback();
                r=i+1;
                break;
            }
        }
    }
    ans[mid]=r;
    while(tmp2<uf.vc.size())uf.rollback();
    r=eb;
    link(edg[mid+1].F, edg[mid+1].S);
    l=mid+1;
    dnc(mid+1, ea, ans[mid], eb);
    while(tmp1<uf.vc.size())uf.rollback();
    l=sa;
    for(int i=r-1; i>=ans[mid]; i--)link(edg[i].F, edg[i].S);
    r=ans[mid];
    dnc(sa, mid-1, sb, ans[mid]);
    while(tmp1<uf.vc.size())uf.rollback();
    r=eb;
}

int main(){
    scanf("%d %d %d", &n, &m, &q);
    int nope=0;
    for(int i=1; i<=m; i++){
        scanf("%d %d", &edg[i].F, &edg[i].S);
        nope=max(nope, link(edg[i].F, edg[i].S));
    }
    while(uf.vc.size()>0)uf.rollback();
    r=m+1;
    if(!nope)dnc(0, m, 1, m+1);
    for(int i=1; i<=q; i++){
        int a, b;
        scanf("%d %d", &a, &b);
        if(nope)puts("NO");
        else if(ans[a-1]<=b+1)puts("NO");
        else puts("YES");
    }
}

Compilation message

Joker.cpp: In function 'void dnc(int, int, int, int)':
Joker.cpp:55:25: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
                 while(sz<uf.vc.size())uf.rollback();
                       ~~^~~~~~~~~~~~~
Joker.cpp:62:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     while(tmp2<uf.vc.size())uf.rollback();
           ~~~~^~~~~~~~~~~~~
Joker.cpp:67:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     while(tmp1<uf.vc.size())uf.rollback();
           ~~~~^~~~~~~~~~~~~
Joker.cpp:72:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     while(tmp1<uf.vc.size())uf.rollback();
           ~~~~^~~~~~~~~~~~~
Joker.cpp: In function 'int main()':
Joker.cpp:77:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d %d %d", &n, &m, &q);
     ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
Joker.cpp:80:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%d %d", &edg[i].F, &edg[i].S);
         ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Joker.cpp:88:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%d %d", &a, &b);
         ~~~~~^~~~~~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Incorrect 2 ms 3456 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 2 ms 3456 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 2 ms 3456 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 2 ms 3456 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 2 ms 3456 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 2 ms 3456 KB Output isn't correct
2 Halted 0 ms 0 KB -