MnZn刚学OI求助线段树粉汁板子题
查看原帖
MnZn刚学OI求助线段树粉汁板子题
455490
Sharpsmile楼主2022/7/20 10:35

RT

只过了Hack数据其他全WA

然而完全没看出来哪里错了啊QAQAQAQ

求神仙帮我哇

//#include <bits/stdc++.h>
#include <iostream>
#include <cstdio>
#include <math.h>
#include <algorithm>
#include <istream>
#include <string>
#include <queue>
#include <deque>
#include <stack>
#include <set>
#include <string.h>
#include <map>
#include <unordered_map>
#include <sstream>
#define mp(a,b) make_pair(a,b)
#define p1(x) x.first
#define p2(x) x.second
#define double long double
#define int long long
using namespace std;
struct DSU{
    int fa[200300];
    int siz[200300];
    stack<int>s;
    #define fa(x) fa[x]
    #define siz(x) siz[x]
    DSU(){
        for(int i=1;i<=200000;i++)
            fa[i]=i,siz[i]=1;
    }
    inline int ff(int x){
        while(fa(x)!=x)x=fa(x);
        return x;
    }
    inline bool merge(int x,int y){
        if(ff(x)==ff(y))return 0;
        x=ff(x),y=ff(y);
        if(siz(x)>siz(y))fa(y)=x,siz(x)+=siz(y),s.push(y);
        else fa(x)=y,siz(y)+=siz(x),s.push(x);
        return 1;
    }
    inline void rmk(){
        if(s.empty())return ;
        int x=s.top();
        siz(fa(x))-=siz(x);
        fa(x)=x;
    }
    inline bool tg(int x,int y){
        return ff(x)==ff(y);
    }
    #undef siz
    #undef fa
}T;
int n,m,k;
bool t[100300];
vector<pair<int,int>>g[400300];
#define lc(x) (x<<1)
#define rc(x) (x<<1|1)
inline void mod(int x,int l,int r,int L,int R,pair<int,int>e){
    if(L<=l&&r<=R){
        g[x].push_back(e);
        return ;
    }
    int mid=l+r>>1;
    if(L<=mid)mod(lc(x),l,mid,L,R,e);
    if(R>mid) mod(rc(x),mid+1,r,L,R,e);
}
inline void calc(int x,int l,int r){
    int cnt =0;
    for(auto e:g[x])
        if(!T.tg(p1(e),p2(e))){
            cnt+=T.merge(p1(e),p2(e)+n);
            cnt+=T.merge(p2(e),p1(e)+n);
        }
        else {
            while(cnt--)T.rmk();
            return ;
        }
    if(l==r){t[l]=1;while(cnt--)T.rmk();return ;}
    int mid=l+r>>1;
    calc(lc(x),l,mid);
    calc(rc(x),mid+1,r);
    while(cnt--)T.rmk();
}
signed main(){
    ios::sync_with_stdio(false);
    //freopen("/Users/noip2019/Downloads/P7735_2.in","r",stdin);
    cin>>n>>m>>k;
    for(int i=1;i<=m;i++){
        int u,v,l,r;
        cin>>u>>v>>l>>r;
        l++;
        if(l<=r)
        mod(1,1,k,l,r,mp(u,v));
    }
    calc(1,1,k);
    for(int i=1;i<=k;i++)
        if(t[i])cout<<"Yes\n";
        else cout<<"No\n";
    return 0;
}

2022/7/20 10:35
加载中...