1#include <cstdio>2#include <cstring>3#include <algorithm>4 using namespacestd;5 intn,m,tl[303],tr[303],f[303][303],num[303],con[303];6 voidInsect (intFaintNow )7 {8 if(tl[fa]==0)9{tl[fa]=Now ;}Ten Else One { A intI=TL[FA]; - while(tr[i]!=0) i=Tr[i]; -tr[i]=Now ; the } - } - voidDfsintx) - { + if(tr[x]!=0) DFS (tr[x]); - if(tl[x]!=0) DFS (tl[x]); +con[x]=con[tr[x]]+con[tl[x]]+1; A inti,j; atf[x][1]=Num[x]; - for(i=0; i<=con[tr[x]];++i) - { -f[x][i]=Max (f[x][i],f[tr[x]][i]); - for(j=0; j<=con[tl[x]];++j) -f[x][i+j+1]=max (f[x][i+j+1],num[x]+f[tr[x]][i]+f[tl[x]][j]); in } - } to intMain () + { -Memset (F,0,sizeof(f)); thememset (TL,0,sizeof(TL)); *memset (TR,0,sizeof(tr)); $Memset (Con,0,sizeof(Con));Panax Notoginsengmemset (NUM,0,sizeof(num)); -scanf"%d%d\n",&n,&M); the inti,j,x,y; + for(i=1; i<=n;++i) A { thescanf"%d%d\n",&x,&num[i]); + insect (x,i); - } $DFS (tl[0]); $printf"%d\n", f[tl[0]][m]); -}
Codevs 1378 Course Selection Tree DP