「CF1105E」Helping Hiasat
题目链接
\(Solution\)
将好友访问你的主页的状态用二进制存下来
其中若第\(i\)位是\(1\),则表示这个好友在第\(i\)个\(1\)操作后访问了你的主页,否则没访问。
所以如果两位好友都高兴则两位好友的二进制数\(\&\)的值为\(0\)
所以这样就变成了一个最大独立集的问题了
如果\(\&\)不为\(0\)这两个好友不能在一个集合.
看数据范围,我们考虑折半
我们先分成两半,一半的最大独立集合保留.另一半用高维前缀和(实际上时高维\(max\))
枚举没有处理的独立集
答案是独立集个数+可以使得这个独立集满足的另一半的高位前缀和.取个\(max\)这里如果不懂可以看代码
我的代码复杂度可能有点不对,因为我是直接搜的,太懒了,实在不想建图
\(Code\)
#include<bits/stdc++.h>
#define rg register
#define file(x) freopen(x".in","r",stdin);freopen(x".out","w",stdout);
using namespace std;
int read(){
    int x=0,f=1;char c=getchar();
    while(c<'0'||c>'9') f=(c=='-')?-1:1,c=getchar();
    while(c>='0'&&c<='9') x=x*10+c-48,c=getchar();
    return f*x;
}
bitset<1000001> vis[44];
string s;
map<string,int> Map;
int f[44][44],bj[44];
int Ans[20048576][3],c[55],n,m,tot,js;
void dfs(int x,int begin,int end,int ans,int flag){
	if(x==end+1){
		int p=0;
		for(int i=begin;i<=end;i++){
			if(c[i]==1) p++; else continue;
			for(int j=begin+1;j<=end;j++)
				if(c[i]==1&&c[j]==1&&f[i][j])
					return ;
		}
		Ans[ans][flag]=p;return;
	}
	for(int i=0;i<=1;i++)
		c[x]=i,dfs(x+1,begin,end,(ans<<1)|i,flag);
}
int main(){
	m=read(),n=read();
	for(int i=1;i<=m;i++){
		int opt=read();
		if(opt==1) { tot++;continue;}
		cin>>s;
		int p=Map[s];
		if(!p) p=Map[s]=++js;
		vis[p][tot]=1;
	}
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			if(i!=j&&((vis[i]&vis[j])!=0))
				f[i][j]=1;
	int mid=n>>1,len=1<<(n/2+1),maxx=0;
	dfs(1,1,mid,0,0);
	dfs(mid+1,mid+1,n,0,1);
	for(int i=1;i<len;i<<=1)
		for(int j=0;j<len;j++)
			if(i&j)
				Ans[j][1]=max(Ans[j][1],Ans[i^j][1]);
	for(int i=0;i<len;i++){
		int x=i,pp=mid;
		memset(bj,0,sizeof(bj));
		while(x){
			int now=x&1;
			if(now==1)
				for(int j=mid+1;j<=n;j++)
					if(f[pp][j])
						bj[j]=1;
			x>>=1,pp--;
		}
		int y=0;
		for(int j=mid+1;j<=n;j++)
			y=((y<<1)|(bj[j]^1));
		maxx=max(maxx,Ans[i][0]+Ans[y][1]);
	}
	cout<<maxx;
    return 0;
}
												
											「CF1105E」Helping Hiasat的更多相关文章
- CF1105E Helping Hiasat
		
题目地址:CF1105E Helping Hiasat 首先将问题转化成图论:对每个人建立一个点,将同一次修改后的所有人代表的点两两连一条边,那么最终所求的就是这个图的最大独立集 我们知道最大独立集是 ...
 - 「译」JUnit 5 系列:条件测试
		
原文地址:http://blog.codefx.org/libraries/junit-5-conditions/ 原文日期:08, May, 2016 译文首发:Linesh 的博客:「译」JUni ...
 - 「译」JUnit 5 系列:扩展模型(Extension Model)
		
原文地址:http://blog.codefx.org/design/architecture/junit-5-extension-model/ 原文日期:11, Apr, 2016 译文首发:Lin ...
 - JavaScript OOP 之「创建对象」
		
工厂模式 工厂模式是软件工程领域一种广为人知的设计模式,这种模式抽象了创建具体对象的过程.工厂模式虽然解决了创建多个相似对象的问题,但却没有解决对象识别的问题. function createPers ...
 - 「C++」理解智能指针
		
维基百科上面对于「智能指针」是这样描述的: 智能指针(英语:Smart pointer)是一种抽象的数据类型.在程序设计中,它通常是经由类型模板(class template)来实做,借由模板(tem ...
 - 「JavaScript」四种跨域方式详解
		
超详细并且带 Demo 的 JavaScript 跨域指南来了! 本文基于你了解 JavaScript 的同源策略,并且了解使用跨域跨域的理由. 1. JSONP 首先要介绍的跨域方法必然是 JSON ...
 - 「2014-5-31」Z-Stack - Modification of Zigbee Device Object for better network access management
		
写一份赏心悦目的工程文档,是很困难的事情.若想写得完善,不仅得用对工具(use the right tools),注重文笔,还得投入大把时间,真心是一件难度颇高的事情.但,若是真写好了,也是善莫大焉: ...
 - 「2014-3-18」multi-pattern string match using aho-corasick
		
我是擅(倾)长(向)把一篇文章写成杂文的.毕竟,写博客记录生活点滴,比不得发 paper,要求字斟句酌八股结构到位:风格偏杂文一点,也是没人拒稿的.这么说来,arxiv 就好比是 paper 世界的博 ...
 - 「2014-3-17」C pointer again …
		
记录一个比较基础的东东-- C 语言的指针,一直让人又爱又恨,爱它的人觉得它既灵活又强大,恨它的人觉得它太过于灵活太过于强大以至于容易将人绕晕.最早接触 C 语言,还是在刚进入大学的时候,算起来有好些 ...
 
随机推荐
- 转:idea类名出现了不同的颜色
			
转:https://blog.csdn.net/yf_mood/article/details/88191818 在安装了git以后发现idea类名出现了不同的颜色,如下: 它们分别表示的含义: 绿色 ...
 - vue入门:(条件渲染)
			
v-if v-show v-else 一.v-if:生成或者移出一个元素 <div id="example"> <button v-on:click=" ...
 - Nginx作为静态资源web服务之文件读取
			
Nginx作为静态资源web服务之文件读取 文件读取会使用到以下几个配置 1. sendfile 使用nginx作为静态资源服务时,通过配置sendfile可以有效提高文件读取效率,设置为on表示启动 ...
 - VS2015 中统计整个项目的代码行数
			
在一个大工程中有很多的源文件和头文件,我如何快速统计总行数? ------解决方案--------------------b*[^:b#/]+.*$^b*[^:b#/]+.*$ ctrl + shif ...
 - 离线下载pytorch安装包
			
1. 选择合适的安装包下载 https://anaconda.org/pytorch/repo?type=conda&label=main 2. 安装命令: conda install 安装包 ...
 - Zookeeper01——zk的基本信息和安装
			
一.Zookeeper的基本信息 1.1背景 无论在前面,我们学习hdfs,还是学习redis集群,我们都会使用到一个zookeeper进行选举.这导致了Redis的产生. 我们知道,在先前我们使用Z ...
 - Linux之vim文本编译器
			
Vim是从 vi 发展出来的一个文本编辑器.代码补完.编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用.和Emacs并列成为类Unix系统用户最喜欢的编辑器. [root@izwz98re ...
 - wget 小技巧
			
一,案例 wget, 一个强大的下载命令.下载文件如果由于中途因本地网络问题断开了,没下载完,重新运行了一下WGET命令,会发现完全在重新下载了,新文件名字会在后面加个1..... 这是wget下载失 ...
 - bind(named)配置文件
			
BIND是DNS协议的一种实现.BIND包含了一个DNS Server(服务名叫named),用来解析主机名到ip地址:一个解析库:一些辅助工具,还有一个安全目录工具,分别属于下面几个包: 下面是原配 ...
 - 用memcache来同步session
			
用memcache来同步session是还是不错的,当然也可以通过redis来保存session,可以php开启并将Session存储到Redis缓存,下面是设置利用memcache在web集群中同步 ...