zoukankan      html  css  js  c++  java
  • Codeforces 1131F Asya And Kittens (构造)【并查集】

    <题目链接>

    题目大意:
    有$n$只小猫,开始将它们放在指定的n个单元格内,然后随机从n-1个隔板中拆除隔板,最终使得这些小猫在同一单元格。现在依次给出拆除隔板的顺序,比如:1 4 就表示1号和4号小猫之间的隔板会被拆除(注:只能拆除相邻区域小猫之间的隔板)。

    解题分析:
    利用并查集处理,$nxt[i]$ 表示 $i$ 之后的小猫序号, $mxri[i]$表示以第$i$个小猫已确定区域的最右端(方便其它小猫接入)。

    #include <bits/stdc++.h>
    using namespace std;
    
    #define N int(2e5+7)
    #define rep(i,s,t) for(int i=s;i<=t;i++)
    int n;
    int nxt[N],fa[N],mxri[N];
    int find(int x){ return x==fa[x]?x:fa[x]=find(fa[x]); }
    int main(){
        scanf("%d",&n);
        rep(i,1,n)fa[i]=i,mxri[i]=i;
        rep(i,1,n-1){
            int x,y;scanf("%d%d",&x,&y);
            x=find(x),y=find(y);
            nxt[mxri[x]]=y;   //将y接在x最右边的元素右边
            mxri[x]=mxri[y];    //将y所连着的元素一块接上
            fa[y]=x;
        }
        for(int i=find(1);i;i=nxt[i])printf("%d ",i);
    }

    2019-02-24

  • 相关阅读:
    lightoj1422_区间dp
    hdu4283_动态规划
    51nod1201_dp思维题
    uestc1218_变形01背包
    hdu5492_枚举dp
    hdu3507_斜率dp
    hdu 1116 Play on Words
    并查集专题
    uva 10160
    uva 572
  • 原文地址:https://www.cnblogs.com/00isok/p/10427936.html
Copyright © 2011-2022 走看看