题意:

给定n个正整数与a,b两个集合,求一种方案使得这n个数恰好被分在这两个集合中且集合中无多余的数且若x在a中则A-x在a中,若x在b中则B-x在b中。

题意理解了我好半天...

解法1:并查集。

把x, A - x,B - x(如果不存在B - x,x就不能放B集合)放入同一个并查集即可。

实现时注意一些乱七八糟的东西,大力讨论即可。

 1 #include <cstdio>
 2 #include <map>
 3 #include <cstring>
 4 const int N = 100010;
 5
 6 int a[N], ans[N], A, B, n, fa[N];
 7 std::map<int, int> mp;
 8
 9 inline int find(int x) {
10     if(x == fa[x]) {
11         return x;
12     }
13     return fa[x] = find(fa[x]);
14 }
15 inline bool check(int x, int y) {
16     return find(x) == find(y);
17 }
18 inline void merge(int x, int y) {
19     fa[find(x)] = find(y);
20     return;
21 }
22
23
24 int main() {
25     memset(ans, -1, sizeof(ans));
26     for(int i = 1; i < N; i++) {
27         fa[i] = i;
28     }
29     scanf("%d%d%d", &n, &A, &B);
30     for(int i = 1; i <= n; i++) {
31         scanf("%d", &a[i]);
32         mp[a[i]] = i;
33     }
34     for(int i = 1; i <= n; i++) {
35         bool x = mp.find(A - a[i]) == mp.end();
36         bool y = mp.find(B - a[i]) == mp.end();
37         if(x && y) {
38             printf("NO");
39             return 0;
40         }
41         else if(x) {
42             int &t = ans[mp[B - a[i]]];
43             if(t == 0) {
44                 printf("NO");
45                 return 0;
46             }
47             if(t == -1) {
48                 t = 1;
49             }
50             ans[i] = 1;
51             merge(i, mp[B - a[i]]);
52         }
53         else if(y) {
54             int &t = ans[mp[A - a[i]]];
55             if(t == 1) {
56                 printf("NO");
57                 return 0;
58             }
59             if(t == -1) {
60                 t = 0;
61             }
62             ans[i] = 0;
63             merge(i, mp[A - a[i]]);
64         }
65         else {
66            merge(i, mp[A - a[i]]);
67            merge(i, mp[B - a[i]]);
68         }
69     }
70
71     for(int i = 1; i <= n; i++) {
72         if(ans[i] == -1) {
73             ans[i] = ans[find(i)];
74         }
75         else {
76             if(ans[find(i)] == -1) {
77                 ans[find(i)] = ans[i];
78             }
79             else if(ans[find(i)] != ans[i]) {
80                 printf("NO");
81                 return 0;
82             }
83         }
84     }
85     printf("YES\n");
86     for(int i = 1; i <= n; i++) {
87         if(ans[find(i)] == -1) {
88             printf("0 ");
89         }
90         else {
91             printf("%d ", ans[find(i)]);
92         }
93     }
94
95     return 0;
96 }

AC代码

转载于:https://www.cnblogs.com/huyufeifei/p/9390391.html

CF 468B Two Sets相关推荐

  1. CodeForces - 468B Two Sets(并查集+思维)

    题目链接:点击查看 题目大意:现在给出两个集合A和B,再给出两个数a和b,现在规定在集合A中的数x必须满足x和a-x同时在集合a中,而在集合B中的数x也同样需要满足x和b-x同时在集合B中,现在给出一 ...

  2. 如何查看linux安装了那些软件下载,linux中安装软件,查看、卸载已安装软件方法...

    各种主流Linux发行版都采用了某种形式的包管理系统(PMS)来控制软件和库的安装. 软件包存储在服务器上,可以利用本地Linux系统上的PMS工具通过互联网访问.这些服务器称为仓库. 由于Linux ...

  3. CF 400 div2

    从昨天周赛开始,要耍CF了~ 开始还害怕个人赛自己数论压根不会怎么办,发现CF全是乱搞的题orz 但是就算是乱搞的也不能1A  T^T 犯的错误基本上都是没有把情况归类导致要么是情况想少了,要么是细节 ...

  4. Cloud Foundry 3. cf 命令

    文章目录 1. Chapter Overview 2. Source Paths: Overview 2.1 Using the Current Directory 2.2 Specifying a ...

  5. lists,tuples and sets of Python

    (python2.7.x) Lists 列表 列表是一个有序序列(集合),可变的(可以修改),可以理解为其他语言中的数组类型,但是列表更灵活更强大. 列表由方括号[]来定义的,它的元素可以是任意类型或 ...

  6. 『参考』.net CF组件编程(4)——为自定义组件添加工具箱图标!

    前言: 在前三篇的文章中,和大家一起创建了一个用于TCP连接检测的小组件,如果你记不得了,可以通过以下链接去回顾一下: 『参考』.net CF组件编程(1)--基础之后 『参考』.net CF组件编程 ...

  7. H.264 picture parameter sets成员值含义学习笔记

    -picture parameter sets 1. pic_parameter_set_id pic_parameter_set_id指明了在切片头中对应的某个psp.pic_parameter_s ...

  8. 粗糙集(Rough sets)、模糊逻辑(Fuzzy Logic)

    第一章  粗糙集理论简介 第一节  粗糙集理论的产生与应用背景 在20世纪70年代,波兰学者Z.Pawlak和一些波兰科学院.波兰华沙大学的逻辑学家们,一起从事关于信息系统逻辑特性的研究,粗糙集理论就 ...

  9. OC对象 vs CF对象

    2019独角兽企业重金招聘Python工程师标准>>> OC对象 vs CF对象 在ARC场景下,对象所有权没有转换 使用__bridge关键字即可实现CF对象和OC对象之间的自由转 ...

最新文章

  1. 执行eclipse,迅速failed to create the java virtual machine。
  2. 马云的 ATM 梦实现了
  3. logstash tcp multihost output(多目标主机输出,保证TCP输出链路的稳定性)
  4. python 在Windows 下切换工作目录
  5. aj6 stamps storm_亲友限定的 AJ 6 要发了?3 月好鞋发售清单 for girls
  6. SpringMVC 文件上传及下载
  7. readline安装
  8. [转]awsome-java
  9. 2017级C语言大作业 - 奇怪的大冒险
  10. Android GPS定位
  11. Swagger2自定义添加请求头key-value暴力猴插件
  12. android开启wifi热点命令,Win7共享WIFI热点让Android手机上网
  13. 关于正则表达式的补充(贪婪和懒惰)
  14. 易基因|靶基因DNA甲基化测序(Target-BS)
  15. 【架构】1366- 如何画出一张优秀的架构图
  16. 计算机系统配置有哪些,电脑的配置基本知识 电脑有哪些基本配置
  17. 印度软件巨头Infosys的成功之道
  18. 批量删除,未勾选数据,点击【批量删除】弹出确认删除提示框
  19. Excel中VBA编程学习笔记(十二)--自动筛选
  20. 玉米社:抖音作品几大核心指标,完播率、点赞率、吸粉率多少算好?

热门文章

  1. VGGNet论文翻译-Very Deep Convolutional Networks for Large-Scale Image Recognition
  2. 树莓派3代B版板载WIFI配置
  3. html jsf ajax blur,是否可以使用JSF ajax更新非JSF组件(纯HTML)?
  4. php与ipa接口登录验证失败,thinkPHP5.0开发微信小程序登录接口signature验证失败
  5. php调用好单库api视频教程,[8.1]-PhalApi视频教程 | PhalApi(π框架) - PHP轻量级开源接口框架 - 接口,从简单开始!...
  6. Python的第三方库xlrd
  7. OAuth2.0认证服务器之客户端相关配置
  8. Linux中的sed命令
  9. Struts项目中引入了过滤器filter后出现中文乱码情况
  10. 使用Maven插件对项目进行打包