@[冰糖鸽子](/user/227728) 建树出了锅,有些地方对不上。你再康康代码吧。
```cpp
#include <bits/stdc++.h>
using namespace std;
int n,sum,f[600000][10];
string s;
struct node
{
int l,r;
}t[600000];
void buildt()
{
int now = sum;
if(s[now-1]=='0'){return;}
else if(s[now-1]=='1'){t[now].l = ++sum;buildt();}
else {t[now].l = ++sum;buildt();t[now].r = ++sum;buildt();}
}
int f_ans(bool x)
{
memset(f,0,sizeof(f));
if(!x)
{
for(int i=sum;i>=1;i--)
{
f[i][0]=max(f[t[i].l][1]+f[t[i].r][0],f[t[i].l][0]+f[t[i].r][1]);
f[i][1]=f[t[i].l][0]+f[t[i].r][0]+1;
}
return max(f[1][1],f[1][0]);
}
else
{
for(int i=sum;i>=1;i--)
{
f[i][0]=min(f[t[i].l][1]+f[t[i].r][0],f[t[i].l][0]+f[t[i].r][1]);
f[i][1]=f[t[i].l][0]+f[t[i].r][0]+1;
}
return min(f[1][1],f[1][0]);
}
}
int main()
{
cin>>s;sum++;
buildt();
cout<<f_ans(0)<<' '<<f_ans(1)<<endl;
return 0;
}
```
by JK_LOVER @ 2020-10-28 15:53:44
@[JK_LOVER](/user/227824)
但是建树这块我是照着题解写的啊
by 冰糖鸽子 @ 2020-10-28 16:00:46
@[JK_LOVER](/user/227824)
突然发现咱俩UID好近。。。
by 冰糖鸽子 @ 2020-10-28 16:02:12
@[冰糖鸽子](/user/227728) 缘分啊
by JK_LOVER @ 2020-10-28 16:05:40
@[JK_LOVER](/user/227824)
所以为什么建树是错的啊/yiw
by 冰糖鸽子 @ 2020-10-28 16:16:43
@[冰糖鸽子](/user/227728) 你现在应该也知道了,我还是说下吧。你的编号是从 1 开始的,但是 string 是从0开始的
by JK_LOVER @ 2020-10-28 16:54:24
@[JK_LOVER](/user/227824)
嗯嗯,蟹蟹您awa
by 冰糖鸽子 @ 2020-10-28 16:59:17