典型的树形DP。
这题的建树方式非常新颖
因为是深度优先搜索输入
所以一个编号为的节点
如果它里面有画那就说明它是叶子结点
如果它没有话那么就继续输入它的左儿子和右儿子
反正题目给的输入是按深搜的顺序
那么我们也不妨用深搜的方式输入!
#include <bits/stdc++.h>
#define ll long long
using namespace std;
ll t,n,m,dp[1005][605];
struct node{
    ll tm,pc;
}e[5005];
inline ll read(){
    ll x=0,f=0;
    char c=getchar();
    while(!isdigit(c))
        f|=c=='-',c=getchar();
    while(isdigit(c))
        x=(x<<1)+(x<<3)+(c^48),c=getchar();
    return f?-x:x;
}
inline void read(ll a){
    e[a].tm=read()*2;
    e[a].pc=read();
    if(!e[a].pc){
        read(a<<1);
        read(a<<1|1);
    }
}
inline void dfs(ll x,ll y){
    if(dp[x][y]||!y)    return;
    if(e[x].pc){
        dp[x][y]=min(e[x].pc,(y-e[x].tm)/5);
        return;
    }
    for(register int i=0;i<=y-e[x].tm;++i){
        dfs(x<<1,i);
        dfs(x<<1|1,y-e[x].tm-i);
        dp[x][y]=max(dp[x][y],dp[x<<1][i]+dp[x<<1|1][y-e[x].tm-i]);
    }
}
signed main(){
    memset(dp,0,sizeof(dp));
    t=read()-1;
    read(1);
    dfs(1,t);
    printf("%lld\n",dp[1][t]);
    return 0;
}
 
    