hdu 4008 Parent and son

    树形dp,比较巧妙的地方就是其中每个询问均为x,y,分别代表以x为根的情况下,y的最小儿子和最小后代.

    如果如何通过一次树形dp,求出每次不同根的情况呢.这里用到了一个非常巧妙的方法.在数据结构里面,通过树的先序,中序,后序遍历结果中的任意两种,就可以确定下这棵树的形态.在这里也是通过一个时间戳,记录下每个点到达和离开的时间就可以确定树的形态了.如果a结点是b结点的孩子,那么a的进入时间必须比b小,且离开时间比b大.


void dfs(int rt)
{
    id[rt][0]=time;
    for(i=0;i<size;i++)
    {
        son=tree[rt][i];
        time++;
        dfs(son);
    }    
    id[rt][1]=ti;
    time++;
}




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值