码迷,mamicode.com
首页 > 其他好文 > 详细

Codeforces 1003E

时间:2019-05-24 22:31:13      阅读:145      评论:0      收藏:0      [点我收藏+]

标签:遇到   自己   回顾   def   strong   mat   数组越界   没有   边界处理   

原题链接

题意

给定\(n,k,d\),请求出1棵树,使其有\(n\)个点,直径为\(d\),且各点度数至多为\(k\);或者输出"NO"表示不可实现。

\(1 \leq n,d,k \leq 4 \times 10^5\)

题解

考虑首先建出长度为\(d\)的直径(链),再在度数不超过\(k\)的前提下尽可能地挂点,并且保证支链长度不超过直径。如此即可求出饱和点数\(most\)。若\(most \geq n\)则输出方案;否则输出"NO"即可。

具体地,为了方便,我们在直径及其分出的支链上挂点;则根据直径的定义,添加点\(i\)后出现的最长支链只能是\((1,i)或(i,d)\)。故维护深度即可求解最长支链。

时间复杂度\(O(n)\)代码见此

回顾与思考

此题非常水,我却没能1A……

编程严谨度不够高,没有手动检测自己的输出结果;并且边界处理不够细致,遇到边界应该立即退出(不能抱有无所谓的侥幸心理),防止数组越界等异常情况。

Codeforces 1003E

标签:遇到   自己   回顾   def   strong   mat   数组越界   没有   边界处理   

原文地址:https://www.cnblogs.com/littlewyy/p/10920443.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!