洛谷P1416 进攻火星 数学

By tinylic By kkksc03

经过找规律可以发现答案为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.

3) ans=n-2
说首先我们 把其中n-2个点构成一张完全图
这样其中每一个点的度均为 n-3

然后我们将 起点s与终点t 向其中的 n-2个点连线,这样 s 和 t 的度就是 n-2
然后中间的点的度 就是n-1,然后把s和t删除后,那其中的n-2个点的度就是n-3,然后就不会被
删除了,只有两个点被删除

 

 

 1 #include <cstdio>
 2 using namespace std ;
 3 
 4 int n ; 
 5 
 6 int main() 
 7 {
 8     scanf("%d",&n) ;
 9     if(n >= 2)
10     {
11         printf("%d\n",n-2) ;
12         return 0 ; 
13     }
14     else 
15     {
16         printf("0\n") ;
17         return 0 ;
18     } 
19     return 0 ;
20 }

 

posted @ 2017-05-15 09:01  third2333  阅读(181)  评论(0编辑  收藏  举报