zoukankan      html  css  js  c++  java
  • 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;
    }
    自己选择的路,跪着也要走完。朋友们,虽然这个世界日益浮躁起来,只要能够为了当时纯粹的梦想和感动坚持努力下去,不管其它人怎么样,我们也能够保持自己的本色走下去。
  • 相关阅读:
    【Vue】状态管理
    【Vue】路由
    【Vue】组件
    【Vue】基础(数据 & 计算属性 & 方法)
    【Vue】基础(虚拟DOM & 响应式原理)
    【Vue】基础(生命周期 & 常用指令)
    【Vue】搭建开发环境
    【Mongodb】事务
    【Mongodb】视图 && 索引
    【Mongodb】聚合查询 && 固定集合
  • 原文地址:https://www.cnblogs.com/WTSRUVF/p/9643672.html
Copyright © 2011-2022 走看看