Codeforces 469 D. Two Sets (并查集)
题目链接:Two Sets
题意:
有n个数,要分成A、B两组,要求如果x∈A则a-x∈A,如果x∈B则b-x∈B,问是否存在一种符合要求的分法。
题解:
并查集,先增加两个点表示A和B集合的根,对于一个数x,如果a-x存在就把x和a-x放一起,否则就将x和B的根相连,如果b-x存在就把x和b-x放一起,否则就将x和A的根相连,最后看一下A和B集合的根是否相连就可以判断出有没有解了,至于分法就看这个数是和A的根相连还是B的根相连了。
#include<bits/stdc++.h>
using namespace std;
const int MAX_N = 1e5 + ;
int vec[MAX_N],vis[MAX_N];
map<int,int> mp;
int N,M,x;
void init()
{
mp.clear();
}
int find_f(int x)
{
if(x == vis[x]) return x;
return vis[x] = find_f(vis[x]);
}
int main()
{
int a,b;
while(cin>>N>>a>>b)
{
init();
for(int i=;i<=N;i++)
{
scanf("%d",&vec[i]);
mp[vec[i]] = i;
}
for(int i=;i<=N+;i++) vis[i] = i; for(int i=;i<=N;i++)
{
if(mp[a-vec[i]] == ) vis[find_f(mp[vec[i]])] = find_f(N+);
else vis[find_f(i)] = find_f(mp[a-vec[i]]);
if(mp[b-vec[i]] == ) vis[find_f(mp[vec[i]])] = find_f(N+);
else vis[find_f(i)] = find_f(mp[b-vec[i]]);
}
if(find_f(N+) == find_f(N+)) cout<<"NO"<<endl;
else
{
cout<<"YES"<<endl;
for(int i=;i<=N;i++)
{
//cout<<"...."<<find_f(i)<<endl;
int x = find_f(N+);
int y = find_f(N+);
if(find_f(i) == x) printf("0 ");
else printf("1 ");
}
cout<<endl;
}
}
return ;
}
/*
70 416035 416023
70034 70322 345689 345965 345701 70046 345737 345713 70166 345821 70010 345749 345677 345725 69962 345869 70178 70310 345785 69998 70070 69974 70058 346001 70106 345953 70226 70154 345929 69950 70298 346049 70346 345989 70286 69986 345893 70082 70238 345797 70250 345833 70334 345845 70094 70118 70202 345977 70262 70274 70190 345941 346025 345761 345773 70142 70022 70130 345881 345917 70358 345905 345665 346013 346061 345809 345857 346037 346073 70214 */
转载自:http://blog.csdn.net/m0_37729344/article/details/73605481
Codeforces 469 D. Two Sets (并查集)的更多相关文章
- Codeforces 468B Two Sets 并查集
题目大意:给出n个数,要求将n个数分配到两个集合中,集合0中的元素x,要求A-x也再0中,同理1集合. 写了几个版本号,一直WA在第8组数据...最后參考下ans,写了并查集过了 学到:1.注意离散的 ...
- Codeforces 699D Fix a Tree 并查集
原题:http://codeforces.com/contest/699/problem/D 题目中所描述的从属关系,可以看作是一个一个块,可以用并查集来维护这个森林.这些从属关系中会有两种环,第一种 ...
- Codeforces 731C:Socks(并查集)
http://codeforces.com/problemset/problem/731/C 题意:有n只袜子,m天,k个颜色,每个袜子有一个颜色,再给出m天,每天有两只袜子,每只袜子可能不同颜色,问 ...
- codeforces 400D Dima and Bacteria 并查集+floyd
题目链接:http://codeforces.com/problemset/problem/400/D 题目大意: 给定n个集合,m步操作,k个种类的细菌, 第二行给出k个数表示连续的xi个数属于i集 ...
- CodeForces 755C PolandBall and Forest (并查集)
题意:给定每一点离他最远的点,问是这个森林里有多少棵树. 析:并查集,最后统计不同根结点的数目即可. 代码如下: #pragma comment(linker, "/STACK:102400 ...
- Codeforces 1027F Session in BSU - 并查集
题目传送门 传送门I 传送门II 传送门III 题目大意 有$n$门科目有考试,第$i$门科目有两场考试,时间分别在$a_i, b_i\ \ (a_i < b_i)$,要求每门科目至少参加 ...
- CodeForces - 455C Civilization (dfs+并查集)
http://codeforces.com/problemset/problem/455/C 题意 n个结点的森林,初始有m条边,现在有两种操作,1.查询x所在联通块的最长路径并输出:2.将结点x和y ...
- Codeforces 859E Desk Disorder:并查集【两个属性二选一】
题目链接:http://codeforces.com/problemset/problem/859/E 题意: 有n个人,2n个座位. 给出这n个人初始的座位,和他们想坐的座位. 每个人要么坐在原来的 ...
- Codeforces 651E Table Compression【并查集】
题目链接: http://codeforces.com/problemset/problem/650/C 题意: 给定n*m的矩阵,要求用最小的数表示每个元素,其中各行各列的大小关系保持不变. 分析: ...
随机推荐
- 如何生成.p12文件
如何生成.p12文件 1. 打开钥匙串 2. 钥匙串选登录,种类选证书 3. 选择开发者,然后导出证书 4. 存储证书 5. 选择存储的时候会提示输入证书的密码,当然,也可以不用输入密码 6. 点击上 ...
- my sql 下左连接 右链接、内连接等应用,INNER JOIN LEFT JOIN RIGHT JOIN
1.数据准备 建两个表格: create table student (idstu int, namestu ) ); ,"张三")(,"李四"),(,&quo ...
- matlab规定小数点保留4位且非科学计数法格式存储txt
matlab 不保存为科学计数法 http://blog.sciencenet.cn/blog-472136-402727.html 经常在表示matlab值时,它总会把一些小于1的大于1000的数使 ...
- Hadoop HBase概念学习系列之HBase里的高表设计概念(表设计)(二十八)
在下面这篇博文里,我给各位博客们,分享了创建HBase表,但这远不止打好基础. HBase编程 API入门系列之create(管理端而言)(8) 在关系型数据库里,表的高表和宽表是不存在的.在如HBa ...
- 安全紧急预警-防范新型 Sigrun 勒索病毒
近日,互联网上出现一种 Sigrun 勒索病毒,其通过垃 圾邮件.网站捆绑软件等方式进行传播.该病毒一旦植入到 用户的服务器,将把系统文件加密为.sigrun 的文件,进而 向受害者勒索虚拟货币.该新 ...
- 企业大数据之Elasticsearch的搜索类型
下面的 ES基于版本(V2.3.4) ES之默认 1.默认自动发先同一局域网的所有集群节点 2.默认一个索引库会有5个分片,(分片越多,效率越好) 由于这两个默认,所以统一索引库的分片对分布在不同机器 ...
- JS定时器相关用法
一.定时器在javascript中的作用 1.制作动画 <!DOCTYPE html> <html lang="en"> <head> < ...
- BZOJ 2763 飞行路线 BFS分层
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=2763 题目大意: Alice和Bob现在要乘飞机旅行,他们选择了一家相对便宜的航空公司 ...
- BZOJ 1066 蜥蜴 最大流
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1066 题目大意: 在一个r行c列的网格地图中有一些高度不同的石柱,一些石柱上站着一些蜥 ...
- 【洛谷】【二分答案+贪心】P1316 丢瓶盖
[题目描述:] 陶陶是个贪玩的孩子,他在地上丢了A个瓶盖,为了简化问题,我们可以当作这A个瓶盖丢在一条直线上,现在他想从这些瓶盖里找出B个,使得距离最近的2个距离最大,他想知道,最大可以到多少呢? [ ...