分析转自:here
题目链接:http://codeforces.com/contest/23/problem/B
有 N 个顶点,顶点之间可以任意互相连边。依次删除度为 0, 1, 2, …, N – 1 的顶点,问最后最多能留下几个顶点?当 N = 1 时,答案显然为 0。
当 N > 1 时,考虑构造一个图,这个图是由含有 N 个顶点的完全图 K_n 删掉一条边得来的。那么有 N – 2 个顶点度是 N – 1,其余 2 个是 N – 2,故此时能留下 N – 2 个顶点。
考虑答案是否可能增大到 N – 1:此时将只删除 1 个顶点,这个顶点度必然是最小的。如果是 K_n 的话不可能, 那么设依然是 K_n 删一条边。设被删除的顶点是 u,顶点 v 没连 u。那么 v 的度数自始至终都是 N – 2,在 0..N – 1 的扫荡中必定会被删除,矛盾。
考虑答案是否可能增大到 N:与 N – 1 同理可证否。
Code:
#include <stdio.h>
int main() {
int N, T;
scanf("%d", &T);
while (T--) {
scanf("%d", &N);
if (N != 1) printf("%d\n", N - 2);
else printf("0\n");
}
return 0;
}