• Tree Constructing CodeForces


    题意:

      就是让构造一个直径为d的树  每个结点的度数不能超过k

    解析:

       先构造出一条直径为d的树枝

      然后去遍历这条树枝上的每个点  为每个点在不超过度数和直径的条件下添加子嗣即可

    #include <bits/stdc++.h>
    #define mem(a, b) memset(a, b, sizeof(a))
    using namespace std;
    const int maxn = 10010, INF = 0x7fffffff;
    int n, d, k;
    
    int cnt;
    struct node
    {
        int u, v;
        node(int u, int v)
        {
            this->u = u;
            this->v = v;
        }
    };
    vector<node> g;
    void dfs(int u, int D, int K)
    {
        if(D == 0) return;
        for(int i=1; i<=K && cnt < n+1; i++)
        {
             g.push_back(node(u, cnt++));
             dfs(cnt-1, D-1, k-1);
        }
    
    }
    
    int main()
    {
        cin>> n >> d >> k;
        cnt = 0;
        if(n <= d || d > 1 && k < 2)
            return puts("NO"), 0;
        for(int i=1; i<=d; i++)
            g.push_back(node(i, i+1));
        cnt = d + 2;
        for(int i=2; i<=d; i++)
        {
            dfs(i, min(i-1, d+1-i), k-2);
        }
        if(cnt <= n) return puts("NO"), 0;
        cout<< "YES" <<endl;
        for(int i=0; i<g.size(); i++)
            cout<< g[i].u << " " << g[i].v <<endl;
    
        return 0;
    }
    自己选择的路,跪着也要走完。朋友们,虽然这个世界日益浮躁起来,只要能够为了当时纯粹的梦想和感动坚持努力下去,不管其它人怎么样,我们也能够保持自己的本色走下去。
  • 相关阅读:
    有限制的最大连续和问题
    Codevs 5056 潜水员
    Codevs 1958 刺激
    Codevs 3731 寻找道路 2014年 NOIP全国联赛提高组
    [NOIP2014]解方程
    Codevs 3729 飞扬的小鸟
    Codevs 1689 建造高塔
    Codevs 2102 石子归并 2
    C语言基础之进制的那些事(1)
    指针
  • 原文地址:https://www.cnblogs.com/WTSRUVF/p/9643672.html
Copyright © 2020-2023  润新知