B. Party – Codeforces Beta Round #23


分析转自: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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值