【BZOJ 2744】【HEOI2012】朋友圈
题目链接:
题解:
对于A国,我们发现,最大团一定不大于2。对于B国,发现同奇偶性点之间都有边,不同奇偶性之间可能有边,也就是说对于B国是一个二分图最大团,也就是求B国补图的二分图最大独立集。然后,我们枚举使用A国的人员,将其与B国连接的点做一个补图,跑跑匈牙利即可。
【注】大视野上测试点和题面不一样啊!MMP没有t读入,只有一组数据,日哦!!
代码:
#include <cstdio>
#include <iostream>
#include <cstring> using namespace std; inline int read(){
int s=,k=;char ch=getchar();
while(ch<''|ch>'') ch=='-'?k=-:,ch=getchar();
while(ch>&ch<='') s=s*+(ch^),ch=getchar();
return s*k;
} const int N=3e3+; int A,B,M; struct edges{
int v;edges *last;
}edge[N*N],*head[N<<];int cnt; inline void push(int u,int v){
edge[++cnt]=(edges){v,head[u]};head[u]=edge+cnt;
} struct Country{
int sgl[N<<],cpl[N<<];
int cnt_sgl,cnt_cpl;
int val[N<<],re[N<<];
inline void add(int x,int pos){
if(x&){
sgl[++cnt_sgl]=pos;
val[pos]=x;re[pos]=cnt_sgl;
}else{
cpl[++cnt_cpl]=pos;
val[pos]=x;re[pos]=cnt_cpl;
}
}
inline void clear(){
cnt_sgl=cnt_cpl=;
}
}a,b; int f[N<<];bool vis[N<<]; inline bool find(int x){ for(edges *i=head[x];i;i=i->last){
if(!vis[i->v]){
vis[i->v]=true;
if(f[i->v]==-||find(f[i->v])){
f[i->v]=x;
return true;
}
}
}
return false;
} int v[][N<<],size[N<<],tt[N<<]; inline void build(){
for(int i=;i<=b.cnt_sgl;i++)
if(tt[b.sgl[i]]==){
for(int j=;j<=b.cnt_cpl;j++)
if(tt[b.cpl[j]]==){
int x=b.val[b.sgl[i]]|b.val[b.cpl[j]];
int t();
while(x) t+=x&,x>>=;
if((~t)&)
push(i,j);
}
}
} inline int solve(){
memset(f,-,sizeof(f));
int ret=;
for(int i=;i<=B;i++)
ret+=tt[i]==;
for(int i=;i<=b.cnt_sgl;i++){
if(tt[b.sgl[i]]==){
memset(vis,,sizeof(vis));
if(find(i))
ret--;
}
}
return ret;
} inline void clear(){
memset(head,,sizeof(head));
cnt=;
} int main(){
// freopen(".in","r",stdin);
// freopen(".out","w",stdout);
clear();
a.clear();b.clear();
memset(v,,sizeof(v));
memset(size,,sizeof(size));
A=read(),B=read(),M=read();
for(int i=;i<=A;i++) a.add(read(),i);
for(int i=;i<=B;i++) b.add(read(),i);
for(int i=,u,vv;i<=M;i++){
u=read(),vv=read();
v[u][++size[u]]=vv;
}
for(int i=;i<=B;i++)
tt[i]=;
build();
int ans=(a.cnt_sgl>)+(a.cnt_cpl>);
ans=max(ans,solve());
memset(tt,,sizeof(tt));
for(int i=;i<=a.cnt_sgl;i++){
for(int j=;j<=size[a.sgl[i]];j++)
tt[v[a.sgl[i]][j]]=;
clear();
build();
ans=max(ans,solve()+);
for(int j=;j<=size[a.sgl[i]];j++)
tt[v[a.sgl[i]][j]]=;
}
for(int j=;j<=a.cnt_cpl;j++){
for(int k=;k<=size[a.cpl[j]];k++)
tt[v[a.cpl[j]][k]]=;
clear();
build();
ans=max(ans,solve()+);
for(int k=;k<=size[a.cpl[j]];k++)
tt[v[a.cpl[j]][k]]=;
}
for(int i=;i<=a.cnt_sgl;i++){
for(int j=;j<=size[a.sgl[i]];j++)
tt[v[a.sgl[i]][j]]++;
for(int j=;j<=a.cnt_cpl;j++){
for(int k=;k<=size[a.cpl[j]];k++)
tt[v[a.cpl[j]][k]]++;
clear();
build();
ans=max(ans,solve()+);
for(int k=;k<=size[a.cpl[j]];k++)
tt[v[a.cpl[j]][k]]--;
}
for(int j=;j<=size[a.sgl[i]];j++)
tt[v[a.sgl[i]][j]]--;
}
printf("%d\n",ans); }
【BZOJ 2744】【HEOI2012】朋友圈的更多相关文章
- bzoj 2744: [HEOI2012]朋友圈 二分图匹配
2744: [HEOI2012]朋友圈 Time Limit: 30 Sec Memory Limit: 128 MBSubmit: 612 Solved: 174[Submit][Status] ...
- 【刷题】BZOJ 2744 [HEOI2012]朋友圈
Description 在很久很久以前,曾经有两个国家和睦相处,无忧无虑的生活着.一年一度的评比大会开始了,作为和平的两国,一个朋友圈数量最多的永远都是最值得他人的尊敬,所以现在就是需要你求朋友圈的最 ...
- bzoj 2744 [HEOI2012]朋友圈——补图!+匈牙利算法
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2744 求最大的团<==>补图(有边的变成没边.没边的变成有边)的最大独立集! A ...
- bzoj 2744: [HEOI2012]朋友圈
#include<cstdio> #include<iostream> #define M 3010 using namespace std; ],u[M*M>>] ...
- 【BZOJ 2744】 2744: [HEOI2012]朋友圈 (最大团,二分图匹配,构图)
2744: [HEOI2012]朋友圈 Description 在很久很久以前,曾经有两个国家和睦相处,无忧无虑的生活着.一年一度的评比大会开始了,作为和平的两国,一个朋友圈数量最多的永远都是最值得他 ...
- 【BZOJ 2744 】[HEOI2012]朋友圈
Description 在很久很久以前,曾经有两个国家和睦相处,无忧无虑的生活着.一年一度的评比大会开始了,作为和平的两国,一个朋友圈数量最多的永远都是最值得他人的尊敬,所以现在就是需要你求朋友圈的最 ...
- BZOJ2744:[HEOI2012]朋友圈(最大团,乱搞)
Description 在很久很久以前,曾经有两个国家和睦相处,无忧无虑的生活着.一年一度的评比大会开始了,作为和平的两国,一个朋友圈数量最多的永远都是最值得他人的尊敬,所以现在就是需要你求朋友圈的最 ...
- luogu P2423 [HEOI2012]朋友圈 (最大团)
在很久很久以前,曾经有两个国家和睦相处,无忧无虑的生活着. 一年一度的评比大会开始了,作为和平的两国,一个朋友圈数量最多的永远都是最值得他人的尊敬,所以现在就是需要你求朋友圈的最大数目.两个国家看成是 ...
- 【二分图】HEOI2012 朋友圈
题目内容 洛谷链接 在很久很久以前,曾经有两个国家和睦相处,无忧无虑的生活着. 一年一度的评比大会开始了,作为和平的两国,一个朋友圈数量最多的永远都是最值得他人的尊敬,所以现在就是需要你求朋友圈的最大 ...
- BZOJ2744: [HEOI2012]朋友圈
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2744 最大团是一个np问题.. 对于本题,做它的逆问题,建反图做最大独立集. 对于A最多取出两 ...
随机推荐
- window配置mongodb集群(副本集)
参数解释: dbpath:数据存放目录 logpath:日志存放路径 pidfilepath:进程文件,有利于关闭服务 logappend:以追加的方式记录日志(boolean值) replSet:副 ...
- 高性能缓存系统Memcached在ASP.NET MVC中应用
在Memcached中实体类型未经序列化不能在Memcached中缓存,因此需要对实体类进行处理,才能缓存下来. Memcached是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库 ...
- Web 前台优化
大型网站--前端性能优化和规范 2013-10-28 09:00 by 贤达, 2769 阅读, 10 评论, 收藏, 编辑 Web性能涉及的范围太广,但一般web开发者在程序上线以后很多都曾遇到 ...
- Razor视图
@{ string name="jerry";} <div> @name </div> //显示jerry @{ string js="& ...
- virtualenv 中 install flask 的小问题
最经在学习Python flask 框架 ,用virtualenv建立好我的flask虚拟环境后,执行 sudo pip install flask 并没有报错 我以为已经装上了flask,但当我进入 ...
- java之jsp内置对象
1.out对象 <% out.println("金鳞岂是池中物,<br>"); out.println("一遇风云变化龙.<br>" ...
- 前端应该了解的PWA
一.传统web 应用 当前web应用在移动时代并没有达到其在桌面设备上流行的程度,下面有张图来对比与原生应用之间的差别. 究其原因,无外乎下面不可避免的几点: 移动设备网络限制-不可忽略的加载时间 w ...
- Dubbo学习-源码学习
Dubbo概述 dubbo框架提供多协议远程调用,服务提供方可以是分布式部署.dubbo框架可以很简单的帮我们实现微服务. 此处援引官网上图片 dubbo分为客户端和服务提供方 服务方将服务注册到注册 ...
- html5 标签在 IE 下使用
(function(){if(!/*@cc_on!@*/0)return;var e = "abbr,article,aside,audio,bb,canvas,datagrid,datal ...
- JDK安装:CentOS和Windows环境
Windows上JDK安装 1:下载jdk. 地址在 http://www.oracle.com/index.html >downloads>se>Ja ...