• F. Asya And Kittens并查集


    F. Asya And Kittens
    time limit per test
    2 seconds
    memory limit per test
    256 megabytes
    input
    standard input
    output
    standard output

    Asya loves animals very much. Recently, she purchased nn kittens, enumerated them from 11 and nn and then put them into the cage. The cage consists of one row of nn cells, enumerated with integers from 11 to nn from left to right. Adjacent cells had a partially transparent partition wall between them, hence there were n1n−1 partitions originally. Initially, each cell contained exactly one kitten with some number.

    Observing the kittens, Asya noticed, that they are very friendly and often a pair of kittens in neighboring cells wants to play together. So Asya started to remove partitions between neighboring cells. In particular, on the day ii, Asya:

    • Noticed, that the kittens xixi and yiyi, located in neighboring cells want to play together.
    • Removed the partition between these two cells, efficiently creating a single cell, having all kittens from two original cells.

    Since Asya has never putted partitions back, after n1n−1 days the cage contained a single cell, having all kittens.

    For every day, Asya remembers numbers of kittens xixi and yiyi, who wanted to play together, however she doesn't remember how she placed kittens in the cage in the beginning. Please help her and find any possible initial arrangement of the kittens into nn cells.

    Input

    The first line contains a single integer nn (2n1500002≤n≤150000) — the number of kittens.

    Each of the following n1n−1 lines contains integers xixi and yiyi (1xi,yin1≤xi,yi≤n, xiyixi≠yi) — indices of kittens, which got together due to the border removal on the corresponding day.

    It's guaranteed, that the kittens xixi and yiyi were in the different cells before this day.

    Output

    For every cell from 11 to nn print a single integer — the index of the kitten from 11 to nn, who was originally in it.

    All printed integers must be distinct.

    It's guaranteed, that there is at least one answer possible. In case there are multiple possible answers, print any of them.

    Example
    input
    Copy
    5
    1 4
    2 5
    3 1
    4 5
    
    output
    Copy
    3 1 4 2 5
    
    Note

    The answer for the example contains one of several possible initial arrangements of the kittens.

    The picture below shows how the cells were united for this initial arrangement. Note, that the kittens who wanted to play together on each day were indeed in adjacent cells.

     

    用并查集模拟,同时维护两边的位置即可

    #include<bits/stdc++.h>
    using namespace std;
    const int N=150100;
    int n,d[N],pre[N],nxt[N],f[N];
    vector<int>g[N];
    void adde(int u,int v){
        g[u].push_back(v);
        g[v].push_back(u);
        d[u]++;
        d[v]++;
    }
    void dfs(int u,int fa){
        printf("%d ",u);
        for(int i=0;i<(int)g[u].size();++i){
            if(g[u][i]!=fa)dfs(g[u][i],u);
        }
    }
    int find(int x){return f[x]==x?x:f[x]=find(f[x]);}
    int main(){
        scanf("%d",&n);
        for(int i=1;i<=n;++i)pre[i]=nxt[i]=f[i]=i;
        for(int i=1;i<n;++i){
            int x,y;
            scanf("%d%d",&x,&y);
            x=find(x),y=find(y);
            adde(nxt[x],pre[y]);
            nxt[x]=nxt[y];
            f[y]=x;
        }
        int rt=0;
        for(int i=1;i<=n;++i)if(d[i]==1){rt=i;break;}
        dfs(rt,0);
        return 0;
    }
  • 相关阅读:
    perlcgiform2
    Linux的Find使用
    perl去除字符串前后的空格
    SQL快速查找
    026*:冷热启动优化、二进制重排、clang插桩(Header、Load Commands 、segment)(main函数前、main函数后)重签名 、ASLR、(PageFault 、System Trace、order文件)fsanitizecoverage=func,tracepcguard Dl_info
    阿里面试题:缓存的一些常见的坑,你遇到过哪些,怎么解决的?
    公司有着 30 多年经验的程序员被辞退了
    PHP7.3报错undefined function simplexml_load_string()(已解决)
    swoole框架中退出命令行程序仍然运行 php a.php &
    mysql服务器cpu爆满解决办法
  • 原文地址:https://www.cnblogs.com/yfr2zaz/p/10425344.html
Copyright © 2020-2023  润新知