2019牛客暑期多校训练营(第五场)F.maximum clique 1(二分图最大独立集)

基于Java的OPC UA Server开发指南:从零开始构建高效服务器 本文介绍了如何使用开源项目org.eclipse.milo创建Java OPC UA Server。通过创建Spring Boot项目,添加Milo SDK依赖,定义Namespace类,服务器启动类以及监听器,详细阐述了建立OPC UA Server服务的步骤。启动后,服务器默认监听地址为opc.tcp://localhost:12685,可使用Softing OPC Client进行连接。 阅读详情

题意

n(n<=5e3)个不同的数,第i个数为ai(1<=ai<=1e9)

找出最大的集合,使得这个集合内的元素两两之间,

在二进制表示下,都有至少两位不同

思路来源

https://ac.nowcoder.com/acm/contest/view-submission?submissionId=41000462

题解

考虑如果至少两个二进制位不同,就连一条边,相当于找图中最大团

而如果建补图,相当于,找补图的最大独立集,且补图中如果二进制位恰有一位不同才会连边

而补图显然是一个二分图,二进制表示下,奇数个1,和偶数个1,分别是二分图的左边和右边

 

结论:二分图最大独立集=两边的点的个数和-二分图最小点覆盖

二分图最小点覆盖=最大匹配,故二分图最大独立集=两边的点的个数和-最大匹配

输出最大独立集方案,即相当于输出最小点覆盖方案的补集

代码

#include <iostream>
#include <algorithm> 
#include <cstring>
#include <cstdio>
#include <map>
const int N=5e3+5; 
using namespace std;
map<int,int>mp;
int head[N],cnt;
int tot,n,m,cx[N],cy[N];
int a[N],b[N],v;
bool vis[N];
struct edge{int to,nex,w;}e[N*N];
void init()
{
	cnt=0;
	memset(head,-1,sizeof head);
}
void add(int u,int v)
{
	e[cnt].to=v;
	e[cnt].nex=head[u];
	head[u]=cnt++;
}
bool dfs(int u)
{
	vis[u]=1;
	for(int i=head[u];~i;i=e[i].nex)
	{
		int v=e[i].to;
		if(!vis[v])
		{
			vis[v]=1;
			if(cy[v-n]==-1||dfs(cy[v-n]))
			{
				cx[u]=v-n;
				cy[v-n]=u;
				return 1;
			}
		}
	}
	return 0;
}
int hungary()
{
	int res=0;
	memset(vis,0,sizeof vis);
	memset(cx,-1,sizeof cx);
	memset(cy,-1,sizeof cy);
	for(int u=1;u<=n;++u)
	{
		memset(vis,0,sizeof vis);
		res+=dfs(u);
	}
	return res;
} 
void MaxIndependentSet()
{
	memset(vis,0,sizeof vis);
	for(int i=1;i<=n;++i)
	if(cx[i]==-1)dfs(i);
	for(int i=1;i<=n;++i)
	if(vis[i])printf("%d ",a[i]);
	for(int i=n+1;i<=n+m;++i)
	if(!vis[i])printf("%d ",b[i-n]);
	puts("");
}
int main()
{ 
    init();
    scanf("%d",&tot);
    for(int i=1;i<=tot;++i)
    {
    	scanf("%d",&v);
    	int num=0,tmp=v;
    	for(;tmp;tmp>>=1)
		if(tmp&1)num++;
    	if(num&1)a[++n]=v;
    	else b[++m]=v;
    }
    for(int i=1;i<=m;++i)
	mp[b[i]]=n+i;//b[i]的实际点为n+i
	for(int i=1;i<=n;++i)
	{
		for(int j=0;j<32;++j)
		{
			if(mp.count(a[i]^(1<<j)))
			{
				add(i,mp[a[i]^(1<<j)]);
				//printf("%d->%d\n",a[i],a[i]^(1<<j));
			}
		}
	}
	printf("%d\n",n+m-hungary());
	MaxIndependentSet();
	return 0;
}

 

软考高级系统架构设计师历年论文真题深度分析(2011-2025) 本文系统分析了2011-2025年系统架构设计师论文真题,归纳出十大主题类别,包括架构风格、企业集成、数据技术、非功能属性等。研究发现新兴技术占比最高(18.8%),企业集成、数据架构和非功能属性为三大核心考点。论文命题呈现明显技术演进特征,从经典架构理论逐步转向云原生、AI融合等前沿方向。备考建议重点关注高频考点和技术前沿,同时强化场景化解决方案能力。分析表明,架构师考试持续跟踪行业技术发展,注重理论与实践结合,为考生提供了明确的备考方向。 阅读详情

相关推荐

未来计算的革命:探索存算一体芯片的潜力与挑战

未来计算的革命:探索存算一体芯片的潜力与挑战

jtwqwq的博客 1612

2019牛客暑期多校训练营(第五场)F-maximum clique 1(二分图最大独立集)

题意:给定n个数字,求出最大的集合,使得集合内任意两个数字在二进制下都有两个及以上1的位置不同。 我正好是前一天刚刷到二分图最小点覆盖,下一页就是最大独立集2333,不过让我做也可能做不出来,毕竟开这道题的人很少。 正难则反,我们可以将只有1位差异的数字之间连边,那么同一条边相连的两个点肯定不可以全选,而且在这种图中,我们最后选出的集合任意两点之间肯定不可以有边的存在,那么就转化成了二分图求最大独...

cy41的博客 319

【测试】echo发送和接收TCP/UDP数据包|shell 发送TCP/UDP数据包

目录 通过/dev/tcp、/dev/udp shell给tcp或udp服务发送16进制报文指令 通过/dev/tcp、/dev/udp (https://blog.csdn.net/u010039418/article/details/86251470) 通过/dev/tcp、/dev/udp可以直接在shell脚本中发起tcp、udp连接,方便又高效,平时用于测试啥的还是挺方便的。 直接发送 格式 /dev/udp/ip/port 比如要向本地10001端口发送数据,可以使用 ec.

我的笔记本 1万+

2019牛客第5场 Fmaximum clique 1(最大独立集合)

2019牛客第5场 Fmaximum clique 1(最大独立集合(网络流做法和二分图匹配做法)) 题目大意 给出n个数字,问一种分法使得可以分出一个尽可能大的集合其中的数字之上二进制位上有两个不同 解题思路 由于数字互不相同,因此至少两位不同的反面就是恰好有一位是不同的。若建图,使得两个数字中恰好有一位不同的点相邻,则只需要找出这个二分图的最大独立集即可。 做法(二分图匹配) 对于最大独立集合...

FLY_WHITE的博客 379

经典算法之——解决全排列问题以及详解

回溯”指的是“状态重置”,可以理解为“恢复现场”,是在编码的过程中,是为了节约空间而使用的,而在递归或者深度优先中根据需要的场合来配合回溯法可以进一步对自己的代码进行优化。, n-1, n},方向都为向左。邻位对换法是全排列生成算法中的其中一种,它的换位是双向的,通过保存数字的“方向性”来快速得到下一个排列。最后以 3 开头的全排列为[3, 1, 2], [3, 2, 1];以 1 开头的全排列为[1, 2, 3], [1, 3, 2];以 2 开头的全排列为[2, 1, 3], [2, 3, 1];

m0_68987535的博客 8795

面试题-手撕NMS(非极大值抑制)

非极大值抑制(Non-Maximum Suppression,NMS)是一种常用于目标检测和计算机视觉中的算法,用于去除重叠的边界框,保留最可能是真实目标的边界框。其核心就是对一组检测框,找出其中属于同一个类别且分数最高的那个框,然后把和这个框的IOU值大于阈值的那些框都删掉。

zhaoyqcsdn的博客 1109

【二分图最大独立集的输出】2019牛客暑期多校训练营(第五场) - F - maximum clique 1

题目链接https://ac.nowcoder.com/acm/contest/885/F 题意 给出n个数,问最多能选出几个数,使得任意两个之间的不同的位数不少于2. 题解 **最大独立集的输出:**左边找一个没有匹配的点,搜一次增光路,把经过的点全部标记。最后左边标记的点和右边没标记的点,就是答案。 不会证明。 #include<bits/stdc++.h> using n...

Eliot的博客 351

通达信-申万宏源金融终端本地数据转sqlite3,2、解析申万宏源C:/zd_swhy_gm/vipdoc/sh/lday的sh600000股票数据

为量化做准备,通达信-申万宏源金融终端本地数据转sqlite3,解析申万宏源C:/zd_swhy_gm/vipdoc/sh/lday的sh600000股票数据

wuyaqi的博客 511

2019牛客暑期多校训练营(第五场)F - maximum clique 1 (最大团:补图最大独立集)

题目链接 题意 求一个最大的集合,集合内的数字两两之间满足不同bit数大于1 最大团:在一个无向图中找出一个点数最多的完全图 思路 求补图的最大独立集:二分图匹配、最小割 可以将原图转为二分图,指定建图方向去掉重复边,方便输出。 网络流:最小割 二分图匹配:对没有匹配的点dfs,输出增广路左点 + 不在增广路上的右点 默认输出右点,如果存在矛盾点,输出增广路左点同时删除增广路右点 #inclu...

Running Bit. 600

ICLR 2025 | MambaPEFT: 探索针对Mamba的参数高效微调方法

通过利用海量数据构建大型模型,基于Transformer的模型生态系统已逐步确立。参数高效微调(PEFT)是一项至关重要的技术,它能以最低成本将这些模型应用于下游任务,同时实现高效的性能表现。最近,基于状态空间模型(SSM)的Mamba模型作为Transformer的潜在替代方案受到了广泛关注。尽管已经提出了许多基于Mamba的大规模模型,但如何高效地将预训练的Mamba模型应用于下游任务仍有待研究。在本文中,作者对适用于Mamba的PEFT方法展开了探索性分析。

小白学视觉 328

西门子PLC编程之⑦编程开始之点位配置及注释

紧接上篇,点位梳理后,进入PLC编程。1、新建工程,配置系统模块2、配置I点并做中文符合,直接上中文,smart支持中文点位编程,用起来很方便。3、配置Q点并做中文符合5、配置AIW模拟量输入点,配置AQW模拟量输出点并做中文符合6、配置手动启动辅助触点,并做中文符合7、 配置自动启动辅助触点,并做中文符合8、 配置传感器浮点型数据变量点位,并做中文符合9、配置系统运行参数设置区点位,做中午符合,做掉电保持.....................

学技术,人生不误——谁也是寂寞宇宙里的流星,只是你的坚持决定了你划过的痕迹。而且,铸造了普遍里的你的唯一。 4890

2019牛客暑期多校训练营(第五场)F maximum clique 1

题目链接:https://ac.nowcoder.com/acm/contest/885/F 题意: 给你5000个1e9范围内的数,现在要你在这些数中取一个子集,使得这个子集中任意两个元素用二进制表示有至少两个不同的位,要你输出这个子集的大小以及值。 做法: 图论选手居然被卡在计算几何上...这样的二分匹配题还是强悍的队友做的= =..老了老了。。 ...

人生如戏 213

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

【Nowcoder】2019牛客暑期多校训练营(第五场)F maximum clique 1 | 二分图 、 最大独立集

题目大意: 给出一个序列,数字各不相同,要求选出一个最大的集合,使得这集合中任意两个数的二进制表示中都有两位及以上的不同 题目思路: 很显然是一个最大团问题 最大团 = 补图的最大独立集 也就是说,对于这个序列,用补图建边:如果两个数相差只有1位就连边 此时就表示为:假设x,yx,yx,y连边,那么xxx和yyy就不能同时出现在一个集合里 也就是转换为了求该图的最大独立集,当然最大独立集前提是一个二分图。 那么数字各不同,又只有一位不同,那么n2n^2n2建图后,显然是一个二分图 首先给二分图染色,白色连接

一只酷酷光儿的博客 428

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

2019牛客暑期多校训练营(第五场) F maximum clique 1 二分图最大独立集 (输出集)

F maximum clique 1 题解: 二分图最大独立集的练习题 • 最大团问题和最大独立集问题是互补的问题 • 两个相异的数至少两个 bit 不一样的否命题就是 : 恰一个 bit 不一样 • 可发现按照题目叙述所建的图的补图就是刚好是二分图 • 于是套用二分图最大独立集模板就把这题解决了 如果只求最大独立集,那么直接一个匈牙利直接搞定,但是还要输出集合!!!!!...

Pikachu的博客 219

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

2019牛客暑期多校训练营(第五场)F maximum clique 1 二分图最大独立集的输出

参考博客:https://blog.csdn.net/monochrome00/article/details/98205456 最大独立集: 简单的说: 独立集就是,就是一个点集,点集中的各点没有关系。 最大独立集就是,点的个数最多的独立集。 最大独立集 == 点的总数 - 最小点覆盖。 简单证明: 最大独立集合的定义 是 最大无关系点的集合。 而最小点覆盖的定义是,二分图中每个边至少一个...

ecjtu_17_TY的博客 309

2019牛客暑期多校训练营(第五场) F maximum clique 1 【二分图的最大独立集】

题目描述 You are given a set S containing n distinct positive integers ​. Please find a subset of S which has the maximum size while satisfying the following constraint: The binary representations of an...

醉酒、冰城外 223

F. maximum clique1(二分图最大独立集)2019牛客暑期多校训练营(第五场)

题目链接:https://ac.nowcoder.com/acm/contest/885/F 题目大意: n个数 ,求一个最大的集合使得两两二进制至少有两位不同,输出集合。 题目思路: 题的题目已经做了一点提示,最大团,考虑建图,如果两个数值有两位以上不同就建边,那么也就是求一个最大团就好了。但是一般图的最大团是NP完全问题。 此时应该考虑补图...

qq_41645482的博客 228

2019牛客暑期多校训练营(第五场)F maximum clique 1 二分图求最大独立集

https://ac.nowcoder.com/acm/contest/885/F #include <bits/stdc++.h> //CLOCKS_PER_SEC #define se second #define fi first #define ll long long #define Pii pair<int,int> #define ...

weixin_30855099的博客 114

2019牛客暑期多校训练营(第五场) maximum clique 1 (Hungary, 二分图最小点覆盖,二分图最大独立集)

链接:https://ac.nowcoder.com/acm/contest/885/F 来源:牛客网 题目描述 You are given a set S containing n distinct positive integers a_1, a_2 … a_n Please find a subset of S which has the maximum size while satisfy...

weixin_44090305的博客 689

2019 牛客暑期多校训练营 第五场 F maximum clique 1 最大独立集

题意:求n个点中bit至少有两位不同的数的最大个数并输出这些点 解:至少两位补集是至多一位不同也即恰好一位不同,因为这些数相异 ,不存在0为不同。 则原来求最大独立集 =点数 -最大匹配。用dinc求最大匹配,按照顶层和非顶层点输出 #include <iostream> #include <cstring> #include <queue> ...

恒持此志成永志 326

2019牛客暑期多校训练营(第五场)maximum clique 1(二分图最小顶点覆盖 点集求解)

原题: https://ac.nowcoder.com/acm/contest/885/F 题意: 给出一些互不相同的值,你现在需要找出一个最大的集合,使得任意两个数的异或不是2的幂次。 解析: 首先观察值与值之间的关系。 因为和一个数异或后为2的幂次的数不会超过30个,所以我们把异或起来为2的幂次的数之间连上边,那么问题就变成了求最大独立集。 再深入观察,两个值连边的话,说明二进制位刚好差一个1...

QAQ 555

F-maximum clique 1_2019牛客暑期多校训练营(第五场)

题意 给出n个不同的数字\(a_i\),求出最大的子集,使得子集内任意两个数在二进制下至少有两位不同。 题解 先对任意两个二进制位只有一个不同的两个数连边,那么问题就转化成找出最多的点集,任意两点没有边,也就是最大独立集问题。普通的图求最大独立集是N-P困难的,但是二分图求最大独立集合是多项式复杂度的。 所以我们把图转换成二分图形式,把二进制下有奇数个1的数放在左边,有偶数个1的数放在右边,这样...

weixin_30325793的博客 172

题解 | maximum clique 1 -2019牛客暑期多校训练营第五场F题

题目来源于牛客竞赛:https://ac.nowcoder.com/acm/contest/discuss 题目描述: 输入描述: 输出描述: 示例1: 题解: 代码: /*{{{*/ #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include&...

lastbye的博客 264

2019牛客暑期多校训练营(第五场)----F- maximum clique 1

首先发出题目链接: 链接:https://ac.nowcoder.com/acm/contest/885/F 来源:牛客网 涉及:二分图匹配,最大团 点击这里回到2019牛客暑期多校训练营解题—目录贴 题目如下: 代码如下: #include <iostream> #include <unordered_map> #include <vector> using namespace std; const int maxn = 5005; unordered_map&

weixin_43702895的博客 295

2019牛客暑期多校训练营(第五场)

今天队友不仅又爆零了,还送我几发罚时(下次再这样就要他请客谢罪) A digits 2 解法:算出n每为数字的和x之后,算出x与n的lcm,输出lcm / x 个n即可 #include<bits/stdc++.h> using namespace std; int gao(int x) { if (!x) return 0; return x % ...

ccsu_cat 817

2019牛客暑期多校训练营(第二场) F Partition problem 【DFS暴力搜索+优化】

题目描述 Given 2N people, you need to assign each of them into either red team or white team such that each team consists of exactly N people and the total competitive value is maximized. Total comp...

醉酒、冰城外 171
上一篇: (转载)广义Fibonacci数列找循环节(心得+知识总结)
下一篇: 2015 ACM National Contest Romania - Round 1 G - Por Costel and the Orchard(区间dp)
小衣同学
博客等级 码龄9年 1444粉丝 995原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小衣同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值