标签:最大值 oid 最小 eof dfs clu == 返回 +=
本来是去找最小生成树的题目的,在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
标签:最大值 oid 最小 eof dfs clu == 返回 +=
原文地址:http://www.cnblogs.com/Loi-dfkdsmbd/p/7703514.html