# | Submission time | Handle | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
256120 | 2020-08-02T09:59:43 Z | 문홍윤(#5033) | Joker (BOI20_joker) | C++17 | 2000 ms | 7404 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; const int inf=987654321; 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(); for(int i=l+1; i<=mid; i++)link(edg[i].F, edg[i].S); l=mid; int tmp2=uf.vc.size(); for(int i=r-1; i>=l; 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); for(int i=1; i<=m; i++)scanf("%d %d", &edg[i].F, &edg[i].S); int ll=m, lr=1; for(int i=1; i<=m; i++){ if(link(edg[i].F, edg[i].S)){ ll=i-1; break; } } while(uf.vc.size())uf.rollback(); r=m+1; dnc(0, ll, 1, m+1); for(int i=ll+1; i<=m; i++)ans[i]=inf; //for(int i=0; i<=m; i++)printf("! %d : %d\n", i, ans[i]); for(int i=1; i<=q; i++){ int a, b; scanf("%d %d", &a, &b); if(ans[a-1]<=b+1)puts("NO"); else puts("YES"); } }
Compilation message
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 2 ms | 3456 KB | Output is correct |
2 | Correct | 3 ms | 3456 KB | Output is correct |
3 | Correct | 2 ms | 3456 KB | Output is correct |
4 | Correct | 3 ms | 3456 KB | Output is correct |
5 | Correct | 2 ms | 3456 KB | Output is correct |
6 | Correct | 2 ms | 3456 KB | Output is correct |
7 | Incorrect | 2 ms | 3456 KB | Output isn't correct |
8 | Halted | 0 ms | 0 KB | - |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 2 ms | 3456 KB | Output is correct |
2 | Correct | 3 ms | 3456 KB | Output is correct |
3 | Correct | 2 ms | 3456 KB | Output is correct |
4 | Correct | 3 ms | 3456 KB | Output is correct |
5 | Correct | 2 ms | 3456 KB | Output is correct |
6 | Correct | 2 ms | 3456 KB | Output is correct |
7 | Incorrect | 2 ms | 3456 KB | Output isn't correct |
8 | Halted | 0 ms | 0 KB | - |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 2 ms | 3456 KB | Output is correct |
2 | Correct | 3 ms | 3456 KB | Output is correct |
3 | Correct | 238 ms | 7404 KB | Output is correct |
4 | Execution timed out | 2077 ms | 7148 KB | Time limit exceeded |
5 | Halted | 0 ms | 0 KB | - |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 2 ms | 3456 KB | Output is correct |
2 | Correct | 3 ms | 3456 KB | Output is correct |
3 | Correct | 2 ms | 3456 KB | Output is correct |
4 | Correct | 3 ms | 3456 KB | Output is correct |
5 | Correct | 2 ms | 3456 KB | Output is correct |
6 | Correct | 2 ms | 3456 KB | Output is correct |
7 | Incorrect | 2 ms | 3456 KB | Output isn't correct |
8 | Halted | 0 ms | 0 KB | - |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 2 ms | 3456 KB | Output is correct |
2 | Correct | 3 ms | 3456 KB | Output is correct |
3 | Correct | 2 ms | 3456 KB | Output is correct |
4 | Correct | 3 ms | 3456 KB | Output is correct |
5 | Correct | 2 ms | 3456 KB | Output is correct |
6 | Correct | 2 ms | 3456 KB | Output is correct |
7 | Incorrect | 2 ms | 3456 KB | Output isn't correct |
8 | Halted | 0 ms | 0 KB | - |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 2 ms | 3456 KB | Output is correct |
2 | Correct | 3 ms | 3456 KB | Output is correct |
3 | Correct | 2 ms | 3456 KB | Output is correct |
4 | Correct | 3 ms | 3456 KB | Output is correct |
5 | Correct | 2 ms | 3456 KB | Output is correct |
6 | Correct | 2 ms | 3456 KB | Output is correct |
7 | Incorrect | 2 ms | 3456 KB | Output isn't correct |
8 | Halted | 0 ms | 0 KB | - |