题目链接

戳我

\(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的更多相关文章

  1. CF1105E Helping Hiasat

    题目地址:CF1105E Helping Hiasat 首先将问题转化成图论:对每个人建立一个点,将同一次修改后的所有人代表的点两两连一条边,那么最终所求的就是这个图的最大独立集 我们知道最大独立集是 ...

  2. 「译」JUnit 5 系列:条件测试

    原文地址:http://blog.codefx.org/libraries/junit-5-conditions/ 原文日期:08, May, 2016 译文首发:Linesh 的博客:「译」JUni ...

  3. 「译」JUnit 5 系列:扩展模型(Extension Model)

    原文地址:http://blog.codefx.org/design/architecture/junit-5-extension-model/ 原文日期:11, Apr, 2016 译文首发:Lin ...

  4. JavaScript OOP 之「创建对象」

    工厂模式 工厂模式是软件工程领域一种广为人知的设计模式,这种模式抽象了创建具体对象的过程.工厂模式虽然解决了创建多个相似对象的问题,但却没有解决对象识别的问题. function createPers ...

  5. 「C++」理解智能指针

    维基百科上面对于「智能指针」是这样描述的: 智能指针(英语:Smart pointer)是一种抽象的数据类型.在程序设计中,它通常是经由类型模板(class template)来实做,借由模板(tem ...

  6. 「JavaScript」四种跨域方式详解

    超详细并且带 Demo 的 JavaScript 跨域指南来了! 本文基于你了解 JavaScript 的同源策略,并且了解使用跨域跨域的理由. 1. JSONP 首先要介绍的跨域方法必然是 JSON ...

  7. 「2014-5-31」Z-Stack - Modification of Zigbee Device Object for better network access management

    写一份赏心悦目的工程文档,是很困难的事情.若想写得完善,不仅得用对工具(use the right tools),注重文笔,还得投入大把时间,真心是一件难度颇高的事情.但,若是真写好了,也是善莫大焉: ...

  8. 「2014-3-18」multi-pattern string match using aho-corasick

    我是擅(倾)长(向)把一篇文章写成杂文的.毕竟,写博客记录生活点滴,比不得发 paper,要求字斟句酌八股结构到位:风格偏杂文一点,也是没人拒稿的.这么说来,arxiv 就好比是 paper 世界的博 ...

  9. 「2014-3-17」C pointer again …

    记录一个比较基础的东东-- C 语言的指针,一直让人又爱又恨,爱它的人觉得它既灵活又强大,恨它的人觉得它太过于灵活太过于强大以至于容易将人绕晕.最早接触 C 语言,还是在刚进入大学的时候,算起来有好些 ...

随机推荐

  1. 转:idea类名出现了不同的颜色

    转:https://blog.csdn.net/yf_mood/article/details/88191818 在安装了git以后发现idea类名出现了不同的颜色,如下: 它们分别表示的含义: 绿色 ...

  2. vue入门:(条件渲染)

    v-if v-show v-else 一.v-if:生成或者移出一个元素 <div id="example"> <button v-on:click=" ...

  3. Nginx作为静态资源web服务之文件读取

    Nginx作为静态资源web服务之文件读取 文件读取会使用到以下几个配置 1. sendfile 使用nginx作为静态资源服务时,通过配置sendfile可以有效提高文件读取效率,设置为on表示启动 ...

  4. VS2015 中统计整个项目的代码行数

    在一个大工程中有很多的源文件和头文件,我如何快速统计总行数? ------解决方案--------------------b*[^:b#/]+.*$^b*[^:b#/]+.*$ ctrl + shif ...

  5. 离线下载pytorch安装包

    1. 选择合适的安装包下载 https://anaconda.org/pytorch/repo?type=conda&label=main 2. 安装命令: conda install 安装包 ...

  6. Zookeeper01——zk的基本信息和安装

    一.Zookeeper的基本信息 1.1背景 无论在前面,我们学习hdfs,还是学习redis集群,我们都会使用到一个zookeeper进行选举.这导致了Redis的产生. 我们知道,在先前我们使用Z ...

  7. Linux之vim文本编译器

    Vim是从 vi 发展出来的一个文本编辑器.代码补完.编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用.和Emacs并列成为类Unix系统用户最喜欢的编辑器. [root@izwz98re ...

  8. wget 小技巧

    一,案例 wget, 一个强大的下载命令.下载文件如果由于中途因本地网络问题断开了,没下载完,重新运行了一下WGET命令,会发现完全在重新下载了,新文件名字会在后面加个1..... 这是wget下载失 ...

  9. bind(named)配置文件

    BIND是DNS协议的一种实现.BIND包含了一个DNS Server(服务名叫named),用来解析主机名到ip地址:一个解析库:一些辅助工具,还有一个安全目录工具,分别属于下面几个包: 下面是原配 ...

  10. 用memcache来同步session

    用memcache来同步session是还是不错的,当然也可以通过redis来保存session,可以php开启并将Session存储到Redis缓存,下面是设置利用memcache在web集群中同步 ...