最近遇到了一个难题,有木有人能帮帮我(语言:C++;算法:并查集)
小明拿到了 n 个互不相同的数,他想把这些数分成 A, B 两个集合,每个数都要放进一个集合,对集合里的数有以下要求:
1、如果一个数 x 在集合 A 里, 那么 a - xa−x 也必须在集合 A 里。
2、如果一个数 x 在集合 B 里, 那么 b - xb−x 也必须在集合 B 里。
如果 a - xa−x 不在这 n 个数里,那么 xx 就不能放进集合 AA 里,如果 b - xb−x 不在这 n 个数里,那么 x 就不能放进集合 B 里。
输入格式
第一行包含三个整数 n, a, b(1 ≤ n ≤ 10^5; 1 ≤ a, b ≤ 10^9)
第二行包含 n 个互不相同的整数 P1, p2, P3 ……pn(1 ≤ P[i] ≤ 10^9)
输出格式
如果可以把这 n 个数按要求分成 A, B 两个集合,那么输出两行,第一行输出YES,第二行输出 n 个数,用空格隔开,第 i 个数如果在集合 A 输出 0 ,如果在集合 B 输出 1 。如果有多种划分方案,输出字典序最小的。
如果不能够按要求划分,那么只输出一行,输出NO。
样例1:
输入:
4 5 9
2 3 4 5
输出:
YES
0 0 1 1
样例2:输入:
3 3 4
1 2 4
输出:
NO