1 条题解

  • 0
    @ 2025-3-27 14:38:33
    #include <bits/stdc++.h>
    using namespace std;
    const int MAXN = 100000;
    int n, m;
    int nxt[MAXN + 5];
    int pre[MAXN + 5];
    bool vis[MAXN + 5];
    int main()
    {
        cin >> n;
        nxt[1] = 0, pre[1] = 0;
        nxt[0] = 1, pre[0] = 1;
        for (int i = 2; i <= n; i++)
        {
            int k, p;
            cin >> k >> p;
            // i 放在了 k 的 p 边(0左、1右)
            // 放在 l、r 之间
            int l, r;
            if (p == 0)
                l = pre[k], r = k;
            else
                l = k, r = nxt[k];
            // 链表插入
            nxt[l] = i, pre[i] = l;
            nxt[i] = r, pre[r] = i;
        }
        // 逻辑上删除
        cin >> m;
        for (int i = 1; i <= m; i++)
        {
            int x;
            cin >> x;
            vis[x] = true;
        }
        // 输出
        int pos = nxt[0];
        while (pos != 0)
        {
            if (!vis[pos])
                cout << pos << " ";
            pos = nxt[pos];
        }
        return 0;
    }
    
    • 1

    信息

    ID
    1792
    时间
    1000ms
    内存
    125MiB
    难度
    3
    标签
    递交数
    3
    已通过
    3
    上传者