zoukankan      html  css  js  c++  java
  • 2020ICPC·小米 网络选拔赛第一场 G-Tree Projection (构造)

    2020ICPC·小米 网络选拔赛第一场 G-Tree Projection (构造)

    题面:

    题意:

    给定一个整数(mathit n) 以及两个(1dots n) 的全排列(A,B)

    请构造一个(mathit n)个节点的无根树,使其以(A_1) 为根时,全排列(mathit A) 是其一个合法的拓扑序。

    使其以(B_1) 为根时,全排列(mathit B) 是其一个合法的dfs序。

    输出:

    辅助数组:(pos_i) 代表第(mathit i)个数在排列(mathit A) 中的位置。

    枚举(iin[2,n])

    开一个辅助变量(now) 代表 (B_1,dots ,B_{i-1})中拓扑序较小(在排列(mathit A) 中的位置更靠前)的数。

    连边((B[i],now)),然后如果(pos_{B_i}<pos_{now}) 就更新now。

    这样生成的树就满足条件。

    证明:

    代码:

    int n;
    int a[maxn];
    int b[maxn];
    int posa[maxn];
    int main()
    {
    #if DEBUG_Switch
        freopen("D:\code\input.txt", "r", stdin);
    #endif
        //freopen("D:\code\output.txt","w",stdout);
        n = readint();
        repd(i, 1, n) {
            a[i] = readint();
            posa[a[i]] = i;
        }
        repd(i, 1, n) {
            b[i] = readint();
        }
        int now = b[1];
        printf("YES
    ");
        repd(i, 2, n) {
            printf("%d %d
    ", now, b[i] );
            if (posa[b[i]] < posa[now]) {
                now = b[i];
            }
        }
        return 0;
    }
    
  • 相关阅读:
    gil
    异步
    字符串 最长回文字串
    字符串 最长公共前缀
    数组 合并区间
    python 排序
    2021.9.3 阿里笔试AK贴
    SIP协议详解
    fiddler抓包各字段的含义
    常见的HTTP状态码列表
  • 原文地址:https://www.cnblogs.com/qieqiemin/p/13881532.html
Copyright © 2011-2022 走看看