大晚上的调了好久没找出错,求助大佬 Orz
//P7073 [CSP-J2020] 表达式
#include<iostream>
#include<cstdio>
#include<stack>
#include<cstring>
using namespace std;
struct node
{
bool v;//value
int bh;//编号
}a[100000+10];
stack<node>st;
string s;
int son[1000000+10][3],sbh[100000+10],tot;
//sbh:swap bh(编号),转换编号
bool deci[1000000+10],decide[100000+10],ans;
int main()
{
getline(cin,s);
int len=s.size();
int n;
scanf("%d",&n);
for(int i=1;i<=n;++i)
scanf("%d",&a[i].v);
for(int i=0;i<len;++i)
{
if(s[i]=='x')
{
++i;
int ss=0;
while(s[i]>='0'&&s[i]<='9')ss=ss*10+s[i]-'0',++i;
a[ss].bh=++tot;
sbh[tot]=ss;
st.push(a[ss]);
}
else if(s[i]=='&')
{
node u1=st.top();st.pop();
node u2=st.top();st.pop();
node u3;
u3.v=u1.v&&u2.v,u3.bh=++tot;
st.push(u3);
son[tot][1]=u2.bh,son[tot][2]=u1.bh;
//cout<<son[i][1]<<endl<<son[i][2]<<endl;
if(u1.v==1)deci[u2.bh]=1;
if(u2.v==1)deci[u1.bh]=1;
}
else if(s[i]=='|')
{
node u1=st.top();st.pop();
node u2=st.top();st.pop();
node u3;
u3.v=u1.v||u2.v,u3.bh=++tot;
st.push(u3);
son[tot][1]=u2.bh,son[tot][2]=u1.bh;
//cout<<son[i][1]<<endl<<son[i][2]<<endl;
if(u1.v==0)deci[u2.bh]=1;
if(u2.v==0)deci[u1.bh]=1;
}
else if(s[i]=='!')
{
node u=st.top();st.pop();
u.v=!u.v;
st.push(u);
}
}
ans=st.top().v;st.pop();
int root=tot;
while(son[root][1]!=0)
{
if(deci[son[root][1]])
{
if(son[son[root][1]][1]==0)
decide[sbh[son[root][1]]]=1;
root=son[root][1];
}
else if(deci[son[root][2]])
{
if(son[son[root][2]][1]==0)
decide[sbh[son[root][2]]]=1;
root=son[root][2];
}
}
int q;
scanf("%d",&q);
for(int i=1;i<=q;++i)
{
//cout<<"111111111"<<endl;
int ques;
scanf("%d",&ques);
if(decide[ques])putchar(!ans+'0');
else putchar(ans+'0');
putchar('\n');
}
return 0;
}
感谢大佬指教!