首页 > 其他 > 详细

【codevs1814】最长链

时间:2017-10-21 10:04:18      阅读:270      评论:0      收藏:0      [点我收藏+]

本来是去找最小生成树的题目的,在codevs搜索一番,打开了它,结果……这和最小生成树有啥关系啊qwq,这个题就是个树形dp啊qwq

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
struct in
{
    int l,r;
}ter[100010];
int n,x,y,tail,ans,head[100010],dp[100010];
void dfs(int ro)
{
    if(ter[ro].l==0&&ter[ro].r==0)//如果没有蛾子直接返回 
        return;
    if(ter[ro].l)//有左蛾子就向左跑 
        dfs(ter[ro].l);
    if(ter[ro].r)//有右蛾子向右跑 
        dfs(ter[ro].r);
    dp[ro]=max(dp[ter[ro].l],dp[ter[ro].r])+1;//选取经过这个点的链最大值 
    int tot=0;
    if(ter[ro].l)
        tot+=dp[ter[ro].l]+1;
    if(ter[ro].r)
        tot+=dp[ter[ro].r]+1;
    ans=max(ans,tot);//因为树上最长链不一定经过根节点,真·套路  
}
int main()
{
    scanf("%d",&n);
    memset(head,-1,sizeof(head));
    for(int i=1;i<=n;i++)
        scanf("%d%d",&x,&y),ter[i].l=x,ter[i].r=y;//建图 
    dfs(1);
    printf("%d",ans);
}//恕我直言,这个题和最小生成树有关系吗qwq 

 

【codevs1814】最长链

原文:http://www.cnblogs.com/Loi-dfkdsmbd/p/7703514.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!