zoukankan      html  css  js  c++  java
  • Tree Reconstruction

    题解:构造策略,将最大值n当作根,其它出现的节点作为叶子节点,然后计算叶子节点出现了几次,则对应这条链上应该有几个节点。

    int n;
    int use[1005];
    
    P ans[1004];
    
    int main()
    {
        cin >> n;
        vector<int> a;
        rep(i, 1, n) {
            int u, v;
            cin >> u >> v;
            if (!use[u]) a.pb(u);
            use[u]++;
            use[v]++;
        }
        sort(Range(a));
        if (use[n] != n - 1) {
            puts("NO");
        }
        else {
            int cnt = 0;
            bool flag = false;
            for (auto v : a) {
                int t = use[v] - 1, tt = 0, last = n;
                rep(i, 1, v) if (!use[i] && tt < t) {
                    tt++;
                    use[i] = 1;
                    ans[++cnt] = P(last, i);
                    last = i;
                }
                ans[++cnt] = P(last, v);
                if (tt != t) {
                    flag = true;
                    break;
                }
            }
            if (flag) {
                puts("NO");
            }
            else {
                puts("YES");
                rep(i, 1, n) cout << ans[i].first << " " << ans[i].second << endl;
            }
        }
        return 0;
    }
  • 相关阅读:
    PPP与资产证券化
    每日一题_190918
    每日一题_190917
    每日一题_190916
    每日一题_190915
    每日一题_190914
    每日一题_190913
    每日一题_190912
    每日一题_190911
    每日一题_190910
  • 原文地址:https://www.cnblogs.com/zgglj-com/p/9682795.html
Copyright © 2011-2022 走看看