zoukankan      html  css  js  c++  java
  • HDU2280 Adding Edges

      题目的意思求标号为1的点的最小可能的度,即在满足给定的条件下,如何连线能够使得连到1上的边尽可能的小。

      由于题中要求  ① degree(i) != degree(j), (i != j, 1 <= i, j <= N).   所以每个点的度一定会是 1,2,3,4 ... N 分布,产生一个度为N的点,那么该点就要与其余N - 1个点以及标号为 “A”的点相连,一次这样的操作后,假设该次选择的点为X,那么N个点中除了 度为N的 X点,度为 1的与 X 相对的点 外,其余所有点的度均为 2,此时我们要选取出度为N-1的点,由于度为1的点(仅存的度为1的点)不能够改变它,所以下一步要在度为2的点中选取一个点添加到同为度为2的 N - 3个点的连线,这时又会产生度为 3 和 度为 N - 1的一对点,一直进行下去,由于“A”点不能够占用度数,所以1也就留到了最后才来连,这样产生的才是合法的,同时这个时候1的度也是最小的,为 ( N + 1 )/ 2。

      代码如下:

    #include <cstdlib>
    #include
    <cstring>
    #include
    <cstdio>
    using namespace std;

    void getint( int &t )
    {
    char c;
    while( c = getchar(), c < '0' || c > '9' ) ;
    t
    = c - '0';
    while( c = getchar(), c >= '0'&& c <= '9' )
    {
    t
    = t * 10 + c - '0';
    }
    }

    int main()
    {
    int N;
    while( getint( N ), N )
    {
    printf(
    "%d\n", ( N + 1 ) >> 1 );
    }
    return 0;
    }

      

  • 相关阅读:
    Stack
    汇编语言结构
    位操作指令bitwise logical instructions
    Linux中一些系统调用的汇编程序
    Ctrl + D
    一般的二进制数描述方法
    在汇编中定义table(array)
    (转)yujiaun 企业站MVC3.0版源码
    (转)knockout.js教程
    (转)开源中国WP7客户端全面开源,包括iPhone客户端与Android
  • 原文地址:https://www.cnblogs.com/Lyush/p/2155509.html
Copyright © 2011-2022 走看看