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. 吐血分享:QQ群霸屏技术教程2017(活跃篇)

    热门词的群排名,在前期优化准备充分的情况下,活跃度不失为必杀技. 在<吐血分享:QQ群霸屏技术(初级篇)>中,我们提及到热门词的群排名,有了前面的基础,我们就可以进入深度优化,实现绝对的霸 ...

  2. Windows环境下安装redis及PHP Redis扩展

    附带管理工具安装教程 安装环境 WNMP环境 参考教程:WIN10下WNMP开发环境部署 安装windows的redis服务 安装包下载 选择msi安装包下载并安装,下载可能会有点慢,请自行使用梯子. ...

  3. git克隆出错 github clone Permission denied (publickey) fatal Could not read from remote repo

    原文网址:http://blog.csdn.net/feeling450/article/details/53067563 github clone "Permission denied ( ...

  4. u-boot-2016.01移植(一)

    1.了解uboot: 阅读uboot源码顶层目录下的README.TXT可以提取如下信息:     made to support booting of Linux images.   //引导内核程 ...

  5. (数据科学学习手札02)Python与R在循环语句与条件语句上的异同

    循环是任何一种编程语言的基本设置,是进行批量操作的基础,而条件语句是进行分支运算的基础,Python与R有着各自不同的循环语句与条件语句语法,也存在着一些相同的地方. Python 1.for循环 ' ...

  6. 前端面试题目汇总摘录(JS 基础篇 —— 2018.11.02更新)

    温故而知新,保持空杯心态 JS 基础 JavaScript 的 typeof 返回那些数据类型 object number function boolean undefined string type ...

  7. itop-4412开发板使用第一篇-信号量的学习使用

    1. 本次基于itop-4412研究下Linux信号量的使用方法. 2. 创建信号量的函数,信号量的头文件在那个路径?编译应用程序的话,头文件有3个路径,内核源码头文件,交叉编译器头文件,ubuntu ...

  8. 【jQuery】 Ajax

    [jQuery] Ajax $.ajax({ type: "Post", // 发包方式 cache: false, // 是否缓存 contentType: "appl ...

  9. Vue学习(一):Vue实例

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. NOI中“大整数加法”问题不能AC的解决建议

    一.检查输入000和00相加是否出结果. 二.数组不要开小了,亲测256的数组不够.推荐1024.   附录AC程序: 如果不能AC请将256改为1024,255改为1023. #include &l ...