hdoj 2800adding ede

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2800

题目大意:

N+1N为奇数)个点(编号为A1,2,3...N),这些点之间初始是有线段相连的:A-1,2-3,4-5...N-1-N。现在要求向这(N+1/2条线段里面加边,使得加完边后的图有以下性质:

1.点1~N的度互不相等(A随意)

2.点1的度尽可能小

现在给你一个N,让根据上面的要求找出在N个点的时候点1度数可能的最小值。

题目分析:

这个题目有一个比较有用的结论,即:

度数为N的点(非A点)和度数为1(非A点)的点在初始状态下是相连的

证明:

度数为N的点与其他N个点是相连的,因此与度数为1的点相连。而度数为1的点值与一个点(N)相连,且整个过程只是增加边,所以初始情况下度数为1的点与度数为N的点是相连的。

A的度数不可能为N,因为如果点A的度数为N,由于还存在另一个度数为N的数字点,他们都和度数为0的点相连,矛盾。

A的度数不可能为1,因为如果点A度数为1,由于还存在另一个吨数为1的数字点,无论度数为N的点初始与哪个点相连,总会有一个点初始度数为0(度数为1的数字点或点A)。

知道上面的结论后可以递归的思考一下:

既然度数为1的点与度数为N的点初始是相连的,那么去掉两个点之后称为N=N-2的情形,现在度数为2的点度数变为1,现在度数为N-1的点变为N-2,再运用上面的结论,得到度数为2的点与度数为N-1的点初始也是相连的,且他们都不是A....余此递归,得出度数为i的点与度数为n+1-i的点是相连的。这样不断的递归下去,初始情况是N=1,回来的过程发现度数为1的点的度数只能是(N+1/2(每回一层加1)。

同时根据上面的证明可以看出这个题加边后的图之间关系是全等的。

所以代码如下:

 

#include <iostream>
using namespace std;
int main()
{
	int n;
	while(cin >> n && n)
		cout << (n+1)/2<<endl;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值