Skip to content

可撤销并查集与分治应用 ​

cpp
void dfs(int l,int r){
    if(l==r){
        //update ans
        return;
    }
    int mid=l+r>>1;
    int ts=dsu.tot;
    for(int i=l;i<=mid;i++)//add edge
    dfs(mid+1,r);
    dsu.back(ts);
    for(int mid+1;i<=r;i++)//add edge
    dfs(l,mid);
    dsu.back(ts);
}