zoukankan      html  css  js  c++  java
  • Codeforces 658C Bear and Forgotten Tree 3【构造】

    题目链接:

    http://codeforces.com/contest/658/problem/C

    题意:

    给定结点数,树的直径(两点的最长距离),树的高度(1号结点距离其他结点的最长距离),写出树边的端点,一种情况即可。如不存在,输出-1。规定根为1号结点。

    分析:

    首先可以明确h<(d+1)/2的时候不能构成树。
    h!=d 时,先将h1个点和1连成串,然后剩下的点都和1直接相连。
    h==d 时,还是先将h1个点和1连成串,剩下的点不能连在这个h个点构成的串的两头,在串中间随便找一点,然后剩下的点都和这个点连在一起就好了。
    但是!前提是有这个随便的一点,也就是说h等于1的时候是没有中间节点的,除非只有两个结点,否则无法构成树。
    h不等于1的情况就很简单了,直接在2上不停的加点就好了。。。

    代码:

    #include <cstdio>
    int main (void)
    {
        int n, d, h;
        scanf("%d%d%d", &n, &d, &h);
        if(h < (d + 1) / 2 ) return printf("-1
    "), 0;
        if(d == 1 && n > 2) return printf("-1
    "), 0;
        for(int i =  1 ; i <=  h; i++)
             printf("%d %d
    ", i , i + 1);
        if (d != h){
            printf("1 %d
    ", h + 2);
            for(int i = h + 2; i <= d; i++ )
                printf("%d %d
    ", i , i + 1);
            for(int i = d + 2; i <= n ; i++)
                   printf("1 %d
    ", i);
        }else{
            for(int i = h+ 2; i <= n; i++)
                printf("2 %d
    ", i);
        }
    
        return 0;
    }
    
  • 相关阅读:
    定时器的实现
    派遣函数
    IRP的同步
    duilib基本流程
    驱动程序的同步处理
    WFP在包含fwpmu.h头的时候出错
    自己写的驱动用CreateFile打开时错误码返回1的问题
    Windows内核函数
    16_会话技术_Session
    15_会话技术_Cookie
  • 原文地址:https://www.cnblogs.com/Tuesdayzz/p/5758692.html
Copyright © 2011-2022 走看看