zoukankan      html  css  js  c++  java
  • 洛谷P1755 攻击火星

    题目描述

    一群外星人将要攻击火星。

    火星的地图是一个n个点的无向图。这伙外星人将按照如下方法入侵,先攻击度为0的点(相当于从图中删除掉它),然后是度为1的点,依此类推直到度为n-1的点。

    所有的点度统计是动态统计的。(一个点删掉后,与之相连的点的点度都会-1)。外星人攻击度为某个数的点时是同时攻击的。

    你需要设计这个图的边的方案来使得未被攻击的点最多。

    输入输出格式

    输入格式:

    输入文件包含一行一个整数n。

    输出格式:

    一行一个整数,表示最多的最后未被攻击的点。

    输入输出样例

    输入样例#1:
    3
    输出样例#1:
    1

    说明

    【样例解释】

    ①-②-③,这样首先删掉度为1的①和③,此时②度数为0,不会被删去。

    【数据范围】

    对于20%的数据1<=n<=10

    对于100%的数据1<=n<=50000

    【题目来源】

    tinylic改编

    By tinylic

    经过找规律可以发现答案为n-2.

    以下是证明:

    令d[i]为i 的度数。

    考虑一个点i 不被删去的条件,必然是前面与i 相邻的点j(可以是多个)被删去,导致d[i]

    减小至小于等于d[j].

    1)易知ans!=n。

    2)考虑ans能否是n-1,也就是只删一个点,设这个点为i。

    因为i 是唯一被删去的点,所以d[i]一定不是最大的,即d[i]<n-1。

    其次删去i 导致其余点的d[]均发生改变,从而无法被删去。

    即i 和其余点都相连,d[i]=n-1,矛盾。

    所以ans!=n-1.

    3)我们可以构造出ans=n-2的情况:

    构造完全图G,删去一条边(i,j)。这样d[i]=d[j]=n-2,其余d[]均为n-1.

    首先删去VI,Vj,这样其余点各少两条边,d[]均变成n-3,不用被删去。

    由此n-2是合法的解,也是最大的解,所以答案就是n-2.

     1 /*By SilverN*/
     2 #include<iostream>
     3 #include<cstdio>
     4 using namespace std;
     5 int main(){
     6     int n;
     7     scanf("%d",&n);
     8     printf("%d
    ",max(0,n-2));
     9     return 0;
    10 }
  • 相关阅读:
    Fixed Table Header jQuery Plugin
    jquery实现置顶和置底特效
    HTTP_REFERER头的使用方法
    为什么使用框架?
    javascript:history的一些用法
    揭秘BYOD五大隐藏成本
    PHP中冒号、endif、endwhile、endfor使用介绍
    面对业务开拓重任,CIO们普遍显得缺乏信心
    Asp.net中的页面传值
    DropDownList的用法
  • 原文地址:https://www.cnblogs.com/SilverNebula/p/6035367.html
Copyright © 2011-2022 走看看