攻击火星(题解)
作者:互联网
题目描述
一群外星人将要攻击火星。
火星的地图是一个n个点的无向图。这伙外星人将按照如下方法入侵,先攻击度为0的点(相当于从图中删除掉它),然后是度为1的点,依此类推直到度为n-1的点。
所有的点度统计是动态统计的。(一个点删掉后,与之相连的点的点度都会-1)。外星人攻击度为某个数的点时是同时攻击的。
你需要设计这个图的边的方案来使得未被攻击的点最多。
输入格式
输入文件包含一行一个整数n。
输出格式
一行一个整数,表示最多的最后未被攻击的点。
输入输出样例
输入 #1复制
3
输出 #1复制
1
说明/提示
【样例解释】
①-②-③,这样首先删掉度为1的①和③,此时②度数为0,不会被删去。
【数据范围】
对于20%的数据1<=n<=10
对于100%的数据1<=n<=50000
【题目来源】
tinylic改编
编者寄语:这道题只看代码很简单,最重要的是学会构造的思路!
分析:
这题一看题目,我们就要构造无向图,看看有没有什么解题的好方法
- 首先,我们按照题目构建的方式,构建一个n为3的无向图
- 然后,根据题目,构建一个n为5的点
- 怎样才能阻止这样悲惨的事情发生呢?
- 看下图(构建一个n为7的点)
- 先把牺牲品和全部好好的点连起来
- 再把全部线连起来
- 再把牺牲品干掉
这样,就保证最大啦(如果n为1,结果也是0,要特判)
完整AC代码
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;
cout<<max(0,n-2);
return 0;
}
标签:题目,攻击,题解,度为,外星人,构建,火星 来源: https://blog.csdn.net/Phrvth/article/details/120470104