【并查集】公司搬迁

题目大意

给出n,a,b和n个数,有两个集合A,B,如果x放在A中则a-x必须存在且在A中,B同理,问你是否有合法方案


解题思路

不难发现,如果a-x或b-x存在,那么和x必须在同一个集合(若x放A中b-x放B中则不满足题面的性质)

那么把有关联的点用并查集连一起,并判断是否都存在a-x或b-x


code

#include<map>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll long long
#define N 100100
using namespace std;
ll T,n,a,b,pp,to[N][3],v[N][3],s[N],fa[N];
map<ll,ll>p;
ll find(ll x)
{return fa[x]==x?x:fa[x]=find(fa[x]);
}
void merge(ll x,ll y)
{ll xx=find(x),yy=find(y);if(xx==yy)return;fa[xx]=yy;v[yy][1]&=v[xx][1];v[yy][2]&=v[xx][2];return;
}
int main()
{scanf("%lld",&T);while(T--){scanf("%lld%lld%lld",&n,&a,&b);for(ll i=1;i<=n;++i){fa[i]=i;scanf("%lld",&s[i]);p[s[i]]=i;}for(ll i=1;i<=n;++i){if(s[i]>=a)to[i][1]=0;else to[i][1]=p[a-s[i]];//a-xif(s[i]>=b)to[i][2]=0;else to[i][2]=p[b-s[i]];v[i][1]=(to[i][1]?1:0);//连边v[i][2]=(to[i][2]?1:0);}for(ll i=1;i<=n;++i){if(to[i][1])merge(i,to[i][1]);if(to[i][2])merge(i,to[i][2]);}pp=1;for(ll i=1;i<=n;++i)if(fa[i]==i)if(!(v[i][1]||v[i][2]))pp=0;//必须可以同时放到一个集合中if(pp)puts("YES");else puts("NO");for(ll i=1;i<=n;++i)p[s[i]]=0;}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/319417.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

牛客练习赛 71 AC

A - 回文数 回文数条件&#xff1a;奇数个数的个数最多有一个 如果0的数量是0&#xff0c;那么直接先找到奇数个数的数是谁&#xff0c;然后正序输出一半逆序输出一半即可。 如果0的数量不是0&#xff0c;只需要找到一个偶数个个数的数放置第一个即可&#xff08;只需要放一个…

开源文件服务器file-service介绍

File-service一个基于ASP.NET Core的可伸缩、通用的文件服务器。通常后端项目可能会有头像、图片、音频、视频等上传/下载需求&#xff0c;这些需求都可以抽象为文件服务。功能特点支持Linux&#xff08;推荐&#xff09;、Windows可伸缩式架构&#xff0c;支持部署1-N台文件服…

【二分】走亲戚

题目大意 平面上有n个点&#xff0c;给出m个询问&#xff0c;每个询问要回答从x轮流往右往左去到最远的点&#xff0c;最后到达的点 解题思路 对于每个询问&#xff0c;每次二分左右可以到多远&#xff0c;直到不能动为止 考虑时间&#xff0c;对于重复走一个范围的&#xf…

CF1375F-Integer Game【交互】

正题 题目链接:https://www.luogu.com.cn/problem/CF1375F 题目大意 给出a,b,ca,b,ca,b,c。先手每次指定一个数kkk&#xff0c;然后后手指定一个数字加上kkk&#xff0c;若有相同的数则先手胜利&#xff0c;操作次数超过100010001000后后手胜。后手不能两次操作同一个数。 你…

Stars(树状数组)

题意&#xff1a; m个星星&#xff0c;一个星星的等级取决于有多少其他星星的横纵坐标不大于它&#xff0c;如果有x个&#xff0c;该星星等级为x 问各个等级的星星有多少个&#xff1f; &#xff08;题目会按照y的升序给出星星坐标&#xff09; 题解&#xff1a; 树状数组入…

AtCoder Regular Contest 105 部分 NIM游戏

TESyyds&#xff0c;本来以为又要3:1&#xff0c;结果创造历史&#xff01;&#xff01;&#xff01;非常激动啊好久好久没看过让二追三了。 无缝衔接回旋踢&#xff0c;qa插眼we。送给雷达哥 A - Fourtune Cookies 签到题 #define IO ios::sync_with_stdio(false);cin.tie(…

【状压DP】作业

题目大意 有n个数&#xff0c;让你对其排列&#xff0c;令排列后的第i个数字为sis_isi​&#xff0c;该排列要满足&#xff1a; ∀i∈[1,n),si≤si1\forall i\in [1,n),s_i\leq s_{i1}∀i∈[1,n),si​≤si1​∀i∈[1,n),∣(min(si,si1),max(si,si1))∩{sj∣k>i}∣≤bi\fora…

Lost Cows(树状数组)

试题链接 题意&#xff1a; 求出一个&#xff11;到&#xff4e;的排列&#xff0c;这个排列只告诉了你从第二个数字开始的比这个数字小的数的个数。 题解&#xff1a; 如果一个数p&#xff0c;p的前面有m个比他小的数&#xff0c;后面有n个比他小的数&#xff0c;那p的位置…

P2611-[ZJOI2012]小蓝的好友【Treap,扫描线】

正题 题目链接:https://www.luogu.com.cn/problem/P2611 题目大意 r∗cr*cr∗c的网格上有nnn个标记点&#xff0c;然后求有多少个矩形包含至少一个标记点。 1≤r,c≤4104,1≤n≤1051\leq r,c\leq 4\times 10^4,1\leq n\leq 10^51≤r,c≤4104,1≤n≤105 保证数据随机 解题思路…

上学要迟到了【最短路转化】

上学要迟到了 题目 牛牛早上起床一看&#xff0c;自己睡过了&#xff0c;赶紧起床准备去学校&#xff0c;他去学校只有两种方式&#xff0c;坐公交车和步行&#xff0c;牛牛去学校是一条直线&#xff0c;这条直线上总共有 nnn 个车站&#xff0c;车站之间的距离都是相等的&am…

Microsoft Tech Summit 2018 课程简述:利用 Windows 新特性开发出更好的手绘视频应用...

概述Microsoft Tech Summit 2018 微软技术暨生态大会将于10月24日至27日在上海世博中心举行&#xff0c;这也会是国内举办的最后一届 Tech Summit&#xff0c;2019 年开始会以 Microsoft Ignite Tour 的形式出现&#xff0c;大家可以在官网查看本次会议信息&#xff1a;https:/…

牛牛和牛可乐的赌约

来源&#xff1a;牛客网&#xff1a; 牛牛和牛可乐的赌约 时间限制&#xff1a;C/C 2秒&#xff0c;其他语言4秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld 题目描述 牛可乐发明了一种n面骰子&#xff08;点数分别从1{}1到{}nn&…

【结论】友谊序列

题目大意 有两个大小为n的数组a,b&#xff08;所有数互不相等&#xff0c;且大于0&#xff09;&#xff0c;a,b中的数组成集合S&#xff0c;问可以构成aixorbj∈Sa_i\ xor\ b_j\in Sai​ xor bj​∈S的数对(i,j)的方案数的奇偶性 解题思路 若aixorbjaka_i\ xor\ b_ja_kai​ x…

GitHub 发布 2018 年开源项目趋势预测

Github 发布了一篇博客&#xff0c;预测了 2018 年开源项目的发展趋势&#xff0c;这些趋势可以帮助开发人员在共享知识的同时&#xff0c;寻求方法简化流程&#xff0c;并 get 新技能。去年&#xff0c;Github 有来自将近 200 个国家的 2400 万的开发者聚集在一起&#xff0c;…

YbtOJ#652-集合比较【Treap】

正题 题目链接:http://www.ybtoj.com.cn/problem/652 题目大意 定义一个元素为一个有序集合包含两个元素C{A,B}C\{A,B\}C{A,B} 集合C{A,B}C\{A,B\}C{A,B}的大小以AAA为第一关键字&#xff0c;BBB为第二关键字比较大小。 开始有两个元素S{S,S},T{T,T}S\{S,S\},T\{T,T\}S{S,S},…

牛牛和牛可乐的赌约2

来源&#xff1a;牛客网&#xff1a; 时间限制&#xff1a;C/C 2秒&#xff0c;其他语言4秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld题目描述 牛牛感觉在上一次赌约中&#xff0c;情况对于自己非常不利&#xff0c;所以决定再赌一…

【线段树】二进制

题目大意 有一个二进制数&#xff0c;让你进行以下操作&#xff1a; 将一个区间的数字按升/降序排列查询一个区间的数字构成的数 解题思路 可以用线段树来维护每一位&#xff0c;预处理出2的整次幂&#xff0c;上传时把左儿子乘上右儿子长度次幂即可 code #include<cstd…

Codeforces Round #676 (Div. 2) E待补

“楼下一个男人病得要死&#xff0c;那间隔壁的一家唱着留声机&#xff0c;对面是弄孩子。楼上有两人狂笑&#xff1b;还有打牌声。河中的船上有女人哭着她死去的母亲。人类的悲欢并不相通&#xff0c;我只觉得他们吵闹。” A - XORwice 把a和b看成二进制数处理&#xff0c;不…

YbtOJ#883-最大的割【带修线性基】

正题 题目链接:http://www.ybtoj.com.cn/contest/118/problem/3 解题思路 给出nnn个点&#xff0c;mmm次动态插入一条无向边询问&#xff1a;割掉一些边使得图中至少两点不连通&#xff0c;并且割掉的边异或和最大。 询问之间相互独立 1≤n≤500,1≤m≤10001\leq n\leq 500,…