[洛谷]P1416 攻击火星 (#数学 -1.13)

面对外星人的入侵,如何设计火星地图上的连接,以最大程度保护城市?本文揭示了一个数学规律,通过构造特定的图结构,使未被攻击的城市数量最大化。

题目描述

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

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

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

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

输入输出格式

输入格式:

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

输出格式:

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

输入输出样例

输入样例#1

3

输出样例#1

1

说明

【样例解释】

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

【数据范围】

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

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


思路

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.

一开始真没想到是数学。

 

#include <stdio.h>
#include <iostream>
using namespace std;
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	int n;
	cin>>n;
	if(n<=2)
	{
		cout<<0<<endl;
	}
	else
	{
		cout<<n-2<<endl;
	}
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值