View on GitHub

coderbreakplus.github.io

Prev

#include<bits/stdc++.h>
using namespace std;
int n,a,b,p[100010],col[100010],colt;
int must[100010],vis[100010]; vector<int>vec[100010];
int ans[100010];
map<int,int>mp;
inline int dfs(int x){
	vec[colt].push_back(x);
	vis[x]=true;
	if(!mp.count(a-p[x])) must[x]=2;
	else if(!vis[mp[a-p[x]]]) dfs(mp[a-p[x]]);
	
	if(!mp.count(b-p[x])){
		if(must[x]){
			puts("NO");
			exit(0);
		}else must[x]=1;
	}else if(!vis[mp[b-p[x]]]) dfs(mp[b-p[x]]);
}
int main(){
	cin>>n>>a>>b;
	for(int i=1;i<=n;i++) cin>>p[i],mp[p[i]]=i;
	for(int i=1;i<=n;i++){
		if(!vis[i]){
			colt++;
			dfs(i);
		}
	}
	for(int i=1;i<=colt;i++){
		int len=vec[i].size();
		for(int j=0;j<len;j++){
			if(must[vec[i][j]]){
				if(col[i] && col[i]!=must[vec[i][j]]){
					puts("NO");
					exit(0);
				}
				col[i]=must[vec[i][j]];
			}
		}
	}
	for(int i=1;i<=colt;i++){
		int nowcol=col[i],len=vec[i].size();
		if(nowcol==0) nowcol=1;
		for(int j=0;j<len;j++) ans[vec[i][j]]=nowcol;
	}
	puts("YES");
	for(int i=1;i<=n;i++) cout<<ans[i]-1<<" ";
	return 0;
}