求调:
#include<iostream>
#include<vector>
using namespace std;
#define int long long
const int N=1e6+10;
vector<int>g[N];
int d[N];
bool ans[N],a[N];
void dfs(int u){
for(int i=0;i<g[u].size();i++){
int v=g[u][i];
dfs(v);
if(d[u]==2) a[u]=(!a[v]);
if(d[u]==3) a[u]^=a[v];
if(d[u]==4) a[u]&=a[v];
if(d[u]==5) a[u]|=a[v];
}
}
void color(int u){
for(int i=0;i<g[u].size();i++){
int v=g[u][i];
if(ans[v]) continue;
ans[v]=1;
dfs(v);
}
}
signed main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
string op;
int u,v;
cin>>op>>u;
if(op=="IN") a[i]=u,d[i]=1;
else{
g[i].push_back(u);
if(op=="NOT") d[i]=2;
else{
cin>>v;
g[i].push_back(v);
if(op=="XOR") d[i]=3;
if(op=="AND") a[i]=1,d[i]=4;
if(op=="OR") d[i]=5;
}
}
}
dfs(1);
for(int i=1;i<=n;i++){
if(d[i]==4){
if(!a[g[i][0]]) color(g[i][1]);
if(!a[g[i][1]]) color(g[i][0]);
}
if(d[i]==5){
if(a[g[i][0]]) color(g[i][1]);
if(a[g[i][1]]) color(g[i][0]);
}
}
for(int i=1;i<=n;i++){
if(d[i]==1){
if(ans[i]) cout<<a[1];
else cout<<!a[1];
}
}
return 0;
}