题目大意:

两个国家 各有A和B个人,每个人有一个数值。

若两个A国的人满足$val_i\space xor \space val_j \mod 2 =1$ 则他们为朋友

若两个B国的人满足$val_i\space xor \space val_j \mod 2 =0$或者二进制下$val_i \space or\space val_j$中有奇数个1 则他们为朋友

给出一些A国的人与B国的人的朋友关系

求图的最大团

思路:

直接求最大团并不好求,发现A国的人最多取2个

而B国形成的图的反图一定为二分图(奇偶相连),而二分图反图的最大团=最大点独立集=$n-$最大匹配

因此我们先建出B国的反图,枚举选A国的人的情况,对每种情况在图上打$tag$ 跑$Dinic$即可

(完全忘记匈牙利.jpg

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<algorithm>
#include<queue>
#include<vector>
#include<map>
#include<set>
#define ll long long
#define db double
#define inf 2139062143
#define MAXN 3010
#define MAXM 5001000
#define rep(i,s,t) for(register int i=(s),i##__end=(t);i<=i##__end;++i)
#define dwn(i,s,t) for(register int i=(s),i##__end=(t);i>=i##__end;--i)
#define ren for(register int i=fst[x];i;i=nxt[i])
#define pb(i,x) vec[i].push_back(x)
#define pls(a,b) (a+b)%MOD
#define mns(a,b) (a-b+MOD)%MOD
#define mul(a,b) (1LL*(a)*(b))%MOD
using namespace std;
inline int read()
{
int x=,f=;char ch=getchar();
while(!isdigit(ch)) {if(ch=='-') f=-;ch=getchar();}
while(isdigit(ch)) {x=x*+ch-'';ch=getchar();}
return x*f;
}
int na,nb,m,ans,S,T,a[],b[MAXN],t1,t2;vector<int> vec[];
struct Dinic
{
int S,T,fst[MAXN],nxt[MAXM<<],to[MAXM<<],val[MAXM<<],cnt,cur[MAXN];
int vis[MAXN],dis[MAXN],tot,q[MAXN],l,r,o1[MAXN],o2[MAXN];
Dinic(){memset(fst,,sizeof(fst));cnt=;}
void add(int u,int v,int w) {nxt[++cnt]=fst[u],fst[u]=cnt,to[cnt]=v,val[cnt]=w;}
void ins(int u,int v,int w) {add(u,v,w);add(v,u,);}
int bfs()
{
q[l=r=]=T,vis[T]=++tot,dis[T]=;int x;
while(l<=r)
{
x=q[l++];ren if(o1[to[i]]==t1&&o2[to[i]]==t2&&vis[to[i]]!=tot&&val[i^])
dis[to[i]]=dis[x]+,vis[to[i]]=tot,q[++r]=to[i];
}
return vis[S]==tot;
}
int dfs(int x,int a)
{
if(x==T||!a) return a;int flw=,f;
for(int& i=cur[x];i&&a;i=nxt[i])
if(dis[to[i]]==dis[x]-&&val[i]&&(f=dfs(to[i],min(a,val[i]))))
a-=f,flw+=f,val[i]-=f,val[i^]+=f;
return flw;
}
int solve(int _s,int _t,int res=)
{
S=_s,T=_t;int f;while(bfs())
{rep(i,,max(S,T)) cur[i]=fst[i];while(f=dfs(S,inf)) res+=f;}
return res;
}
}D;
int lowbit(int x) {return x&(-x);}
int cheq(int x,int res=) {for(;x;x-=lowbit(x)) res++;return !(res&);}
int vis[MAXN],vis2[MAXN];
int main()
{
na=read(),nb=read(),m=read();int x,y,sum;S=nb+,T=S+;
rep(i,,na) a[i]=read();rep(i,,nb) b[i]=read();
while(m--) x=read(),y=read(),pb(x,y);
rep(i,,nb) if(b[i]&) D.ins(S,i,);
else {D.ins(i,T,);rep(j,,nb) if((b[j]&)&&cheq(b[i]|b[j])) D.ins(j,i,);}
rep(i,,na) pb(i,S),pb(i,T);
ans=max(ans,nb-D.solve(S,T));D.solve(T,S);
rep(i,,na)
{
sum=-;rep(x,,vec[i].size()-) D.o1[vec[i][x]]=i,sum++;
t1=i,ans=max(ans,sum+-D.solve(S,T));D.solve(T,S);
}
rep(i,,na) if(a[i]&)
{
rep(x,,vec[i].size()-) D.o1[vec[i][x]]=i+na;t1=i+na,sum=-;
rep(j,i+,na) if(!(a[j]&))
{
rep(x,,vec[j].size()-) D.o2[vec[j][x]]=i*na+j,sum+=(D.o1[vec[j][x]]==t1);
t2=i*na+j;ans=max(ans,sum+-D.solve(S,T));D.solve(T,S);sum=-;
}
}
printf("%d",ans);
}

bzoj 2744 朋友圈的更多相关文章

  1. 【BZOJ 2744 朋友圈】

    Time Limit: 30 Sec  Memory Limit: 128 MBSubmit: 1570  Solved: 532[Submit][Status][Discuss] Descripti ...

  2. BZOJ - 2744 朋友圈 (二分图上的最大团)

    [题目大意] 在很久很久以前,曾经有两个国家和睦相处,无忧无虑的生活着.一年一度的评比大会开始了,作为和平的两国,一个朋友圈数量最多的永远都是最值得他人的尊敬,所以现在就是需要你求朋友圈的最大数目.两 ...

  3. bzoj 2744: [HEOI2012]朋友圈 二分图匹配

    2744: [HEOI2012]朋友圈 Time Limit: 30 Sec  Memory Limit: 128 MBSubmit: 612  Solved: 174[Submit][Status] ...

  4. 【BZOJ 2744】 2744: [HEOI2012]朋友圈 (最大团,二分图匹配,构图)

    2744: [HEOI2012]朋友圈 Description 在很久很久以前,曾经有两个国家和睦相处,无忧无虑的生活着.一年一度的评比大会开始了,作为和平的两国,一个朋友圈数量最多的永远都是最值得他 ...

  5. 【BZOJ 2744 】[HEOI2012]朋友圈

    Description 在很久很久以前,曾经有两个国家和睦相处,无忧无虑的生活着.一年一度的评比大会开始了,作为和平的两国,一个朋友圈数量最多的永远都是最值得他人的尊敬,所以现在就是需要你求朋友圈的最 ...

  6. 【刷题】BZOJ 2744 [HEOI2012]朋友圈

    Description 在很久很久以前,曾经有两个国家和睦相处,无忧无虑的生活着.一年一度的评比大会开始了,作为和平的两国,一个朋友圈数量最多的永远都是最值得他人的尊敬,所以现在就是需要你求朋友圈的最 ...

  7. QQ空间/朋友圈类界面的搭建

    类似于QQ空间的布局主要是在说说信息.点赞.回复三大部分的自适应布局上. 当我们需要搭建类似QQ空间.微信朋友圈的界面的时候,可做如下操作: 创建一个对应的model类: 创建一个对应model类的f ...

  8. Python微信-- 分享接口(分享到朋友圈、朋友、空间)

    生成JS-SDK权限验证的签名 获取signature(签名)首先要获得 1.#获得jsapi_ticket 2.#获取当前页面的url #获取当前页面的url url="{}://{}{} ...

  9. Apple Watch版微信来了 收发微信刷朋友圈不在话下

    昨晚果粉守了一夜的Apple Watch发布会,意料中的惊喜不少,最让人兴奋的是微信成为首批支持的应用.是的,在全球拥有4.68亿月活跃用户的微信怎么可能不第一时间入驻呢?之前我们就有聊过Apple ...

随机推荐

  1. waiting TTFB 时间优化

    百度百科解释:获取在接收到响应的首字节前花费的毫秒数. 根据chrome浏览器,具体请求链接的这个时间,对反应慢的页面进行优化.

  2. hexo干货系列:(三)hexo的Jacman主题优化

    前言 上一篇介绍了Jacman主题的安装和配置,今天根据上次的基础做了些优化,让博客看起来很舒服. 正文 首页文章展示摘要 该主题首页文章列表默认是全部展开,感觉不好,我关闭掉了,只展示少量摘要. 修 ...

  3. HDU1166-敌兵布阵,线段数模板题~~

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  4. Go map基础

    package main import "fmt" //Map //创建:make(map[string]int) //获取元素: m[key] //key不存在时,获得value ...

  5. 使用HttpWebRequest post数据时要注意UrlEncode

    今天在用HttpWebResponse类向一个远程页面post数据时,遇到了一个怪问题:通过对比自己post的参数和服务器接收到的值,发现参数中的一个+号被替换成了空格. 造成这个错误的原因在于+号在 ...

  6. msp430入门编程50

    msp430中项目编程套路 msp430入门编程 msp430入门学习

  7. Java有几种线程池?

    Java通过Executors提供四种线程池,分别为:newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程newFixed ...

  8. http_load分析(转)

    http://www.cnblogs.com/xuning/p/3954057.html 一.前言 http_load是一款测试web服务器性能的开源工具,从下面的网址可以下载到最新版本的http_l ...

  9. Spring Boot+Profile实现不同环境读取不同配置

    文件结构如下: 但是官方推荐放在config文件夹下. 作用: 不同环境的配置设置一个配置文件,例如:dev环境下的配置配置在application-dev.properties中.prod环境下的配 ...

  10. java . 请在小于99999的正整数中找符合下列条件的数,它既是完全平方数,又有两位数字相同,如:144,676。

    import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; //请在小于99999的正整数中找符合下列条件的 ...