CF 468B Two Sets
题意:
给定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相关推荐
- CodeForces - 468B Two Sets(并查集+思维)
题目链接:点击查看 题目大意:现在给出两个集合A和B,再给出两个数a和b,现在规定在集合A中的数x必须满足x和a-x同时在集合a中,而在集合B中的数x也同样需要满足x和b-x同时在集合B中,现在给出一 ...
- 如何查看linux安装了那些软件下载,linux中安装软件,查看、卸载已安装软件方法...
各种主流Linux发行版都采用了某种形式的包管理系统(PMS)来控制软件和库的安装. 软件包存储在服务器上,可以利用本地Linux系统上的PMS工具通过互联网访问.这些服务器称为仓库. 由于Linux ...
- CF 400 div2
从昨天周赛开始,要耍CF了~ 开始还害怕个人赛自己数论压根不会怎么办,发现CF全是乱搞的题orz 但是就算是乱搞的也不能1A T^T 犯的错误基本上都是没有把情况归类导致要么是情况想少了,要么是细节 ...
- Cloud Foundry 3. cf 命令
文章目录 1. Chapter Overview 2. Source Paths: Overview 2.1 Using the Current Directory 2.2 Specifying a ...
- lists,tuples and sets of Python
(python2.7.x) Lists 列表 列表是一个有序序列(集合),可变的(可以修改),可以理解为其他语言中的数组类型,但是列表更灵活更强大. 列表由方括号[]来定义的,它的元素可以是任意类型或 ...
- 『参考』.net CF组件编程(4)——为自定义组件添加工具箱图标!
前言: 在前三篇的文章中,和大家一起创建了一个用于TCP连接检测的小组件,如果你记不得了,可以通过以下链接去回顾一下: 『参考』.net CF组件编程(1)--基础之后 『参考』.net CF组件编程 ...
- H.264 picture parameter sets成员值含义学习笔记
-picture parameter sets 1. pic_parameter_set_id pic_parameter_set_id指明了在切片头中对应的某个psp.pic_parameter_s ...
- 粗糙集(Rough sets)、模糊逻辑(Fuzzy Logic)
第一章 粗糙集理论简介 第一节 粗糙集理论的产生与应用背景 在20世纪70年代,波兰学者Z.Pawlak和一些波兰科学院.波兰华沙大学的逻辑学家们,一起从事关于信息系统逻辑特性的研究,粗糙集理论就 ...
- OC对象 vs CF对象
2019独角兽企业重金招聘Python工程师标准>>> OC对象 vs CF对象 在ARC场景下,对象所有权没有转换 使用__bridge关键字即可实现CF对象和OC对象之间的自由转 ...
最新文章
- 执行eclipse,迅速failed to create the java virtual machine。
- 马云的 ATM 梦实现了
- logstash tcp multihost output(多目标主机输出,保证TCP输出链路的稳定性)
- python 在Windows 下切换工作目录
- aj6 stamps storm_亲友限定的 AJ 6 要发了?3 月好鞋发售清单 for girls
- SpringMVC 文件上传及下载
- readline安装
- [转]awsome-java
- 2017级C语言大作业 - 奇怪的大冒险
- Android GPS定位
- Swagger2自定义添加请求头key-value暴力猴插件
- android开启wifi热点命令,Win7共享WIFI热点让Android手机上网
- 关于正则表达式的补充(贪婪和懒惰)
- 易基因|靶基因DNA甲基化测序(Target-BS)
- 【架构】1366- 如何画出一张优秀的架构图
- 计算机系统配置有哪些,电脑的配置基本知识 电脑有哪些基本配置
- 印度软件巨头Infosys的成功之道
- 批量删除,未勾选数据,点击【批量删除】弹出确认删除提示框
- Excel中VBA编程学习笔记(十二)--自动筛选
- 玉米社:抖音作品几大核心指标,完播率、点赞率、吸粉率多少算好?
热门文章
- VGGNet论文翻译-Very Deep Convolutional Networks for Large-Scale Image Recognition
- 树莓派3代B版板载WIFI配置
- html jsf ajax blur,是否可以使用JSF ajax更新非JSF组件(纯HTML)?
- php与ipa接口登录验证失败,thinkPHP5.0开发微信小程序登录接口signature验证失败
- php调用好单库api视频教程,[8.1]-PhalApi视频教程 | PhalApi(π框架) - PHP轻量级开源接口框架 - 接口,从简单开始!...
- Python的第三方库xlrd
- OAuth2.0认证服务器之客户端相关配置
- Linux中的sed命令
- Struts项目中引入了过滤器filter后出现中文乱码情况
- 使用Maven插件对项目进行打包