1. 程式人生 > >【codevs1814】最長鏈

【codevs1814】最長鏈

如果 namespace 最大值 最小 dev tdi amp void ()

本來是去找最小生成樹的題目的,在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】最長鏈