求调
查看原帖
求调
1110924
liluhexuan楼主2024/5/10 16:53

求调:

#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;
}
2024/5/10 16:53
加载中...