求助抱灵

P2585 [ZJOI2006] 三色二叉树

@[冰糖鸽子](/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


|