YY_More

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

2011年7月2日

摘要: 这个是NOI2003的原题,是一道树形动态规划。题意就是找到树上的3个点a,b,c,使得ab<ac且ab+bc最大。我们发现ab和bc总能抽象成一个T的形状,那么设最中间那个交叉点为x,那么ax,bx,cx肯定是从x连出去的3条最大的边。我们按两个方向DP,维护3个值和最大值的来源,最后枚举交叉点即可。其实这道题跟树网的核加强版差不多,多维护一个值而已。不过我发现我写的这几道树形动规程序都很慢,不清楚是哪里做的不规范。唉~~~这里抱怨一下:为什么有的OJ要用lld,有的要用I64d呢?为什么我的RP这么差,在每个地方都试了两次。。。(巴蜀上是I64d)//By YY_More#inclu 阅读全文
posted @ 2011-07-02 22:45 YY_More 阅读(276) 评论(0) 推荐(1) 编辑

摘要: 一道基础的树形动态规划。就是求从树里每个点出发的最长链的长度。考虑到这个最长链可能是从子节点来的也可能是从父节点来的,我们进行两次DFS。第一次是从儿子到父亲方向,维护从每个节点到儿子节点方向的最长链和次长链。第二次维护从父亲方向来的最长链,有两种情况,如果父亲节点第一次DFS得到的最长链来自正在遍历的子节点,则从父亲的次长链转移,否则直接从父亲的最长链转移。问题是我的程序怎么那么慢呢。。。简化掉一些memset之后还是100+ms,奇怪。//By YY_More#include<cstdio>#include<cstring>struct treetype{ int 阅读全文
posted @ 2011-07-02 10:14 YY_More 阅读(283) 评论(0) 推荐(1) 编辑