Time Limit: 30 Sec  Memory Limit: 128 MB
Submit: 1570  Solved: 532
[
Submit][Status][Discuss]

Description

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

两个国家看成是AB两国,现在是两个国家的描述:

1. A国:每个人都有一个友善值,当两个A国人的友善值a、b,如果a xor b mod 2=1,

那么这两个人都是朋友,否则不是;

2. B国:每个人都有一个友善值,当两个B国人的友善值a、b,如果a xor b mod 2=0

或者 (a or b)化成二进制有奇数个1,那么两个人是朋友,否则不是朋友;

3. A、B两国之间的人也有可能是朋友,数据中将会给出A、B之间“朋友”的情况。

4. 在AB两国,朋友圈的定义:一个朋友圈集合S,满足

S∈A∪ B ,对于所有的i,j∈ S ,i 和 j 是朋友

由于落后的古代,没有电脑这个也就成了每年最大的难题,而你能帮他们求出最大朋 友圈的人数吗?

Input

第一行t<=6,表示输入数据总数。

接下来t个数据:

第一行输入三个整数A,B,M,表示A国人数、B国人数、AB两国之间是朋友的对数;第二行A个数ai,表示A国第i个人的友善值;第三行B个数bi,表示B国第j个人的友善值;

第4——3+M行,每行两个整数(i,j),表示第i个A国人和第j个B国人是朋友。

Output

输出t行,每行,输出一个整数,表示最大朋友圈的数目。

Sample Input

2 4 7
1 2
2 6 5 4
1 1
1 2
1 3
2 1
2 2
2 3
2 4

Sample Output

5
【样例说明】
最大朋友圈包含A国第1、2人和B国第1、2、3人。

HINT

【数据范围】
两类数据
第一类:|A|<=200 |B| <= 200
第二类:|A| <= 10 |B| <= 3000

【题解】

     ①题目是求最大团,但是直接弄很麻烦。

     ②观察题目性质,A图是一个二分图,B图很混乱,因此考虑反图:

     ③A图的反图是两个完全图,B图反图是二分图。求反图的最大独立集就是原图的最大团。

     ④记得反转AB之间的边。有变无无变有。

     ⑤进行二分图匹配,不过先强制匹配AB之间的边,这样可以保证剩下的点为二分图

#include<stdio.h>
#include<algorithm>
#define go(i,a,b) for(int i=a;i<=b;i++)
#define fo(i,a,x) for(int i=a[x],v=e[i].v;i;i=e[i].next,v=e[i].v)
const int N=3308;bool Pal[N][N];struct E{int v,next;}e[N*N];
int C,T1,T2,A,B,M,a[N],n,head[N],k=1,c[N],vis[N],cover[N],ans;
void ADD(int u,int v){e[k]=(E){v,head[u]};head[u]=k++;}
bool isEven(int x){int sum=0;while(x)sum++,x-=x&-x;return (sum&1)==0;} int AUG(int u)
{
if(cover[u]==T1)return 0;
fo(i,head,u)if(vis[v]!=T2&&cover[v]!=T1){
vis[v]=T2;if(!c[v]||AUG(c[v])){c[v]=u;return 1;}}return 0;
} int main()
{
scanf("%d%d%d",&A,&B,&M);n=A+B;
go(i,1,n)scanf("%d",a+i);
go(i,1,M){int u,v;scanf("%d%d",&u,&v);Pal[u][v+A]=Pal[v+A][u]=1;}
go(i,A+1,n)if(a[i]&1)go(j,A+1,n)if(!(a[j]&1))
if(isEven(a[i]|a[j]))ADD(i,j),ADD(j,i); go(x,0,A)if(a[x]&1||x==0)
go(y,0,A)if(!(a[y]&1)||y==0)
{
T1++;int cnt=0;go(i,A+1,n)c[i]=0;
if(x)go(i,A+1,n)if(!Pal[i][x])cnt+=(cover[i]!=T1),cover[i]=T1;
if(y)go(i,A+1,n)if(!Pal[i][y])cnt+=(cover[i]!=T1),cover[i]=T1;
go(i,A+1,n)if(a[i]&1)T2++,cnt+=AUG(i);ans=std::max(ans,B+(x>0)+(y>0)-cnt);
}
printf("%d\n",ans);return 0;
}//Paul_Guderian

.

【BZOJ 2744 朋友圈】的更多相关文章

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

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

  2. bzoj 2744 朋友圈

    题目大意: 两个国家 各有A和B个人,每个人有一个数值. 若两个A国的人满足$val_i\space xor \space val_j \mod 2 =1$ 则他们为朋友 若两个B国的人满足$val_ ...

  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. JavaSE 第二次学习随笔(三)

    * 常见异常 * 数组越界异常 * 空指针异常 * * * 特点: 当程序出现异常的时候, 程序会打印异常信息并中断程序 * 所以当同时出现多个异常的时候只能执行第一个, 后边的用不到 * * 单异常 ...

  2. linux课后作业1

    本实验6第一题:菜单驱动程序. 随便进到某个目录,vim driver.sh 把代码写进去. #!/bin/bash function welcome() { echo -e "\n&quo ...

  3. Python3爬虫(八) 数据存储之TXT、JSON、CSV

    Infi-chu: http://www.cnblogs.com/Infi-chu/ TXT文本存储 TXT文本存储,方便,简单,几乎适用于任何平台.但是不利于检索. 1.举例: 使用requests ...

  4. go执行外部应用

    go执行外部应用 最近想将原来用asp.net mvc写的一个公司内部网站改用beego来写,但发现其中有一个功能是,能将加密的sqlite文件进行解密,因为这个解密是不能公开的,但有些同事需要查看这 ...

  5. STL 入门 (17 暑假集训第一周)

    快速全排列的函数 头文件<algorithm> next_permutation(a,a+n) ---------------------------------------------- ...

  6. Android面试收集录 网络与加密

    1.创建Socket对象需要至少指定哪些信息? IP(或域名)和端口号 Socket socket=new Socket("www.baidu.com",80); 2.如何使用So ...

  7. 事务消息中心-TMC

    此文已由作者杨凯明授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 背景 为什么要做事务消息中心 原有kqueue的方式缺点: 降低业务库性能 占用业务库磁盘 历史数据管理成本 ...

  8. Android应用AsyncTask处理机制详解及源码分析

    1 背景 Android异步处理机制一直都是Android的一个核心,也是应用工程师面试的一个知识点.前面我们分析了Handler异步机制原理(不了解的可以阅读我的<Android异步消息处理机 ...

  9. jquery框架一点小心得

    下面的小事例 主要实现了 一和按ID查找,并获取元素的 value 或 标签内容和一个去字符串空格的小功能能 假设元素id=“myid”: 获取标签内容$("myid").html ...

  10. 「暑期训练」「基础DP」 Piggy-Bank (HDU-1114)

    题意与分析 完全背包问题. 算法背包九讲里面都有提到过,我自己再说下对完全背包的理解. 为什么01背包中遍历状态从VV到00?考虑一下基本方程$dp[i][j]=max(dp[i-1][j-w[i]] ...