题面

因为$A$中只有奇偶性不同的人才能做朋友,所以A中只可能出0/1/2个人,分类讨论

然后$B$中求最大团,转成补图后正好是个二分图(不然就不用做了),求最大点独立集=总点数-最大匹配

我洛谷上交的时候建边的时候制杖了,成了$O(n^2m^2)$建边,还好数据水跑不满+网络流跑得快900ms救回来了,估计BZOJ肯定gg了,正确的做法是直接对B全部建然后走边的时候判一下

 #include<cstdio>
#include<vector>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=,M=,inf=1e9;
int p[N],from[M],noww[M],goal[M],flw[M],flow[M];
int a[N],b[N],pp[N],ch[N],dep[N],que[N];
int T,n,m,s,t,fr,bk,q,t1,t2,cnt,ans;
vector<int> ve[N];
vector<int> ::iterator it;
bool Odd(int x){return x&;}
bool Even(int x){return !(x&);}
int Bitcount(int x)
{
int ret=;
while(x)
ret++,x-=x&-x;
return ret;
}
void Link(int f,int t,int v)
{
noww[++cnt]=p[f],p[f]=cnt,from[cnt]=f;
goal[cnt]=t,flw[cnt]=flow[cnt]=v;
noww[++cnt]=p[t],p[t]=cnt,from[cnt]=t;
goal[cnt]=f,flw[cnt]=flow[cnt]=;
}
bool Layering(int st,int ed)
{
for(int i=;i<=ed;i++)
pp[i]=p[i],dep[i]=-;
dep[st]=,que[fr=bk=]=st;
while(fr<=bk)
{
int tn=que[fr++];
for(int i=pp[tn];i;i=noww[i])
if(ch[from[i]]&&ch[goal[i]])
if(dep[goal[i]]==-&&flow[i])
dep[goal[i]]=dep[tn]+,que[++bk]=goal[i];
}
return ~dep[ed];
}
int Augmenting(int nd,int ed,int mn)
{
if(nd==ed||!mn) return mn;
int tmp=,tep=;
for(int i=pp[nd];i;i=noww[i])
if(ch[from[i]]&&ch[goal[i]])
{
pp[nd]=i;
if(dep[goal[i]]==dep[nd]+)
if(tep=Augmenting(goal[i],ed,min(mn,flow[i])))
{
flow[i]-=tep,mn-=tep;
flow[i^]+=tep,tmp+=tep;
if(!mn) break;
}
}
return tmp;
}
int Dinic_Maxflow(int st,int ed)
{
int ret=;
while(Layering(st,ed))
ret+=Augmenting(st,ed,inf);
return ret;
}
int main()
{
register int i,j,k;
scanf("%d",&T);
while(T--)
{
scanf("%d%d%d",&n,&m,&q),ans=;
for(i=;i<=n;i++) ve[i].clear();
for(i=;i<=n;i++) scanf("%d",&a[i]);
for(i=;i<=m;i++) scanf("%d",&b[i]);
for(i=;i<=q;i++)
scanf("%d%d",&t1,&t2),ve[t1].push_back(t2);
cnt=,s=m+,t=s+;
for(i=;i<=m+;i++) ch[i]=,p[i]=;
for(i=;i<=m;i++)
for(j=i+;j<=m;j++)
if(Odd(b[i]^b[j])&&Even(Bitcount(b[i]|b[j])))
Odd(b[i])?Link(i,j,):Link(j,i,);
for(i=;i<=m;i++)
Odd(b[i])?Link(s,i,):Link(i,t,);
ans=max(ans,m-Dinic_Maxflow(s,t));
for(i=;i<=n;i++)
{
int tmp=;
for(j=;j<=m;j++) ch[j]=;
for(j=;j<=cnt;j++) flow[j]=flw[j];
for(it=ve[i].begin();it!=ve[i].end();it++) tmp++,ch[*it]=;
ans=max(ans,tmp-Dinic_Maxflow(s,t)+);
}
for(i=;i<=n;i++)
for(k=i+;k<=n;k++)
if(Odd(a[i]^a[k]))
{
int tmp=;
for(j=;j<=m;j++) ch[j]=;
for(j=;j<=cnt;j++) flow[j]=flw[j];
for(it=ve[i].begin();it!=ve[i].end();it++) ch[*it]++;
for(it=ve[k].begin();it!=ve[k].end();it++) ch[*it]++;
for(j=;j<=m;j++) ch[j]==?tmp++,ch[j]=:ch[j]=;
ans=max(ans,tmp-Dinic_Maxflow(s,t)+);
}
printf("%d\n",ans);
}
return ;
}

解题:HEOI 2012 朋友圈的更多相关文章

  1. Leetcode547 朋友圈解题报告 (DFS

    题目描述: 班上有 N 名学生.其中有些人是朋友,有些则不是.他们的友谊具有是传递性.如果已知 A 是 B 的朋友,B 是 C 的朋友,那么我们可以认为 A 也是 C 的朋友.所谓的朋友圈,是指所有朋 ...

  2. C++之路进阶——codevs2366(朋友圈)

    2366 朋友圈 2012年省队选拔赛河北  时间限制: 10 s  空间限制: 256000 KB  题目等级 : 大师 Master     题目描述 Description 在很久很久以前,曾经 ...

  3. [LeetCode] Friend Circles 朋友圈

    There are N students in a class. Some of them are friends, while some are not. Their friendship is t ...

  4. LeetCode 547 朋友圈

    题目: 班上有 N 名学生.其中有些人是朋友,有些则不是.他们的友谊具有是传递性.如果已知 A 是 B 的朋友,B 是 C 的朋友,那么我们可以认为 A 也是 C 的朋友.所谓的朋友圈,是指所有朋友的 ...

  5. Leetcode之深度优先搜索(DFS)专题-547. 朋友圈(Friend Circles)

    Leetcode之深度优先搜索(DFS)专题-547. 朋友圈(Friend Circles) 深度优先搜索的解题详细介绍,点击 班上有 N 名学生.其中有些人是朋友,有些则不是.他们的友谊具有是传递 ...

  6. [LeetCode] 547. Friend Circles 朋友圈

    There are N students in a class. Some of them are friends, while some are not. Their friendship is t ...

  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. 《图说VR入门》——入门汇总

    本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/53818922 作者:car ...

  2. libgdx学习记录13——矩形CD进度条绘制

    利用ShapeRenderer可进行矩形进度条的绘制,多变形的填充等操作. 这是根据角度获取矩形坐标的函数. public Vector2 GetPoint( float x, float y, fl ...

  3. Egret(白鹭引擎)——Egret+fairyGui 实战项目入门

    前言 一行白鹭上青天 需求 最近,我们老板刷刷的为了省事,给美术减压(背景有点长,不说了). 美术出 fairygui,我需要在网页上看到实时操作,并且看到效果! 需求分析 这怕是要了我的狗命啊,但是 ...

  4. web项目_学生证管理系统

    项目简述: 基于java web实现学生卡管理系统,用户包括学生和学生处,分别实现以下功能. 学生: 1.对本人登录密码的修改 2.申请补办学生卡 3.查看学生卡补办状态 学生处: 1.对学生信息的管 ...

  5. 安装loadrunner11出现Microsoft Visual c++2005 sp1安装失败

    本文转至别处,网上大神多

  6. ABP中文文档及源码说明

    目录 ABP.ModuleZero(ABP自带的一套用户模块) 版本管理(Edition) 特性管理(Feature)

  7. 1065 A+B and C

    同样是一题会产生溢出的题,不同的是这个用大数类很麻烦,因为有负数的可能性 不妨利用溢出的特性来解题:两个整数和为负数 或者 两个负数和为正数,那么就溢出了. #include<bits/stdc ...

  8. wordpress 5.1 后台拿shell

    闲着没事搭建了一套最新版wordpress 5.1,本身wordpress后台安全防御是比较差的,想尝试下后台是否可以拿shell. 再上传插件的地方可以直接上传php文件,并且该文件可以执行: sh ...

  9. 《Linux内核设计与实现》Chapter 18 读书笔记

    <Linux内核设计与实现>Chapter 18 读书笔记 一.准备开始 一个bug 一个藏匿bug的内核版本 知道这个bug最早出现在哪个内核版本中. 相关内核代码的知识和运气 想要成功 ...

  10. 软件工程作业 - Week 1

    构建之法读后疑问: 初步的完成构建程序设计思路之后实现过程中发现了问题或者可以优化的地方是立马就改进还是完成之后按照步骤统一进行优化. 覆盖性测试,针对一些永远用不到只是用来预防极为极端的情况下,例如 ...