• #423 Div2 D


    #423 Div2 D

    题意

    构造一个 n 个节点的树,恰好有 k 个叶子节点 (叶子节点的定义是只与树上的某一个节点存在连边),要求任意两个叶子节点的距离的最大值最小,距离为两个节点间边的数量,输出距离的最大值,以及 n - 1 条边。

    分析

    构造 “星型树” ,节点 1 为中心,首先连 k 条边到 k 个节点,对于多的点,周期性的绕最外层的 k 个点不断连接即可。

    code

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int MAXN = 1e5 + 5;
    typedef pair<int, int> P;
    vector<P> ans;
    vector<int> v1, v2;
    int main() {
        int n, k;
        cin >> n >> k;
        n--;
        n -= k;
        int lens = 2;
        for(int i = 2; i <= k + 1; i++) {
            ans.push_back(P(1, i));
            v1.push_back(i);
        }
        int z = k + 2;
        while(n) {
            lens++;
            if(n > 1) lens++;
            for(int i = 0; i < v1.size() && n > 0; i++) {
                ans.push_back(P(v1[i], z));
                v2.push_back(z);
                z++; n--;
            }
            v1.clear();
            v1 = v2;
            v2.clear();
        }
        cout << lens << endl;
        for(int i = 0; i < ans.size(); i++) {
            cout << ans[i].first << " " << ans[i].second << endl;
        }
        return 0;
    }
    
  • 相关阅读:
    更改sql server数据库所有者的对象
    对C#委托及事件委托的理解
    印度人是怎样开发软件的?
    SQL常用函数
    Ajax学习1
    Ajax学习2
    什么是ORM?
    jQuery 移动网页到制定的位置
    Juery 控件的取值赋值
    js禁用滚动条
  • 原文地址:https://www.cnblogs.com/ftae/p/7163586.html
Copyright © 2020-2023  润新知