首页 > 代码库 > codeforces 533B Work Group
codeforces 533B Work Group
树形dp。原来这样交替着dp就可以。。。。。。
好像dfs只能传一个参不然爆栈?
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#define maxv 200500#define maxe 400500#define inf 0x7f7f7f7f7f7f7f7fLLusing namespace std;int n,x,g[maxv],nume=0,a[maxv],fath[maxv];long long dp[maxv][2];struct edge{ int v,nxt;}e[maxe];void addedge(int u,int v){ e[++nume].v=v; e[nume].nxt=g[u]; g[u]=nume;}void dfs(int x){ dp[x][0]=0;dp[x][1]=-inf; for (int i=g[x];i;i=e[i].nxt) { int v=e[i].v; if (v==fath[x]) continue; fath[v]=x;dfs(v); long long t0=dp[x][0],t1=dp[x][1]; dp[x][0]=max(t0+dp[v][0],t1+dp[v][1]); dp[x][1]=max(t0+dp[v][1],t1+dp[v][0]); } dp[x][1]=max(dp[x][0]+a[x],dp[x][1]);}int main(){ scanf("%d",&n); for (int i=1;i<=n;i++) { scanf("%d%d",&x,&a[i]); if (i!=1) {addedge(x,i);addedge(i,x);} } dfs(1); printf("%lld\n",dp[1][1]); return 0;}
codeforces 533B Work Group
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。