2366 朋友圈

2012年省队选拔赛河北

 时间限制: 10 s
 空间限制: 256000 KB
 题目等级 : 大师 Master
 
 
题目描述 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 Description

第一行 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 Description

输出 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

数据范围及提示 Data Size & Hint

对于其中 30%的数据,A=0,B<=100; 
对于其中 50%的数据,A<=10,B<=100; 
对于其中 10%的数据,A<=5,B<=1000; 
对于其中 10%的数据,A<=5,B<=1500; 
对于 100%的数据,M<=A*B,友善值在2^30 以内。

题解:

对与A图而言,奇数与奇数相连,偶数与偶数相连,A图中只能选一个或者不选,最多一奇一偶,对于B图而言,求最大团,建立反边,求最大独立子集,(ps:原本与A图所连边的点是不能算的)

代码:

  1. #include<cstdio>
  2. #include<iostream>
  3. #define maxn 50000
  4. #include<cstring>
  5. #include<algorithm>
  6.  
  7. using namespace std;
  8.  
  9. int m,head[maxn],A,B,a[maxn],b[maxn],x,y,cnt=,ans,T1,T2,bank[maxn],res[maxn],tim[maxn],sta[maxn];
  10. bool map[][];
  11.  
  12. struct ss
  13. {
  14. int to;
  15. int next;
  16. }e[maxn];
  17.  
  18. int Cout(int x)
  19. {
  20. int re=;
  21. while (x)
  22. {
  23. x-=x&-x;
  24. ++re;
  25. }
  26. return re;
  27. }
  28.  
  29. void add(int u,int v)
  30. {
  31. e[++cnt].next=head[u];
  32. head[u]=cnt;
  33. e[cnt].to=v;
  34. }
  35.  
  36. bool find(int x)
  37. {
  38. if (bank[x]==T1) return ;
  39. for (int i=head[x];i;i=e[i].next)
  40. if (bank[e[i].to]!=T1&&sta[e[i].to]!=T2)
  41. {
  42. sta[e[i].to]=T2;
  43. if (tim[e[i].to]!=T1||!res[e[i].to]||find(res[e[i].to]))
  44. {
  45. tim[e[i].to]=T1;
  46. res[e[i].to]=x;
  47. return ;
  48. }
  49. }
  50. return ;
  51. }
  52.  
  53. int Maximum_Independent_Set(int x=,int y=)
  54. {
  55. int re=;
  56. ++T1;
  57. for (int i=;i<=B;i++)
  58. if (map[x][i]||map[y][i])
  59. {
  60. bank[i]=T1;
  61. ++re;
  62. }
  63. for (int i=;i<=B;i++)
  64. if (b[i]&)
  65. {
  66. ++T2;
  67. if (find(i))
  68. ++re;
  69. }
  70. return B-re;
  71. }
  72.  
  73. int main()
  74. {
  75. memset(map,,sizeof map);
  76. scanf("%d%d%d",&A,&B,&m);
  77. for (int i=;i<=A;i++)
  78. scanf("%d",&a[i]);
  79. for (int i=;i<=B;i++)
  80. scanf("%d",&b[i]);
  81. for (int i=;i<=m;i++)
  82. scanf("%d%d",&x,&y),map[x][y]=;
  83. for (int i=;i<=B;i++)
  84. if (b[i]&)
  85. for (int j=;j<=B;j++)
  86. if (~b[j]&)
  87. if (~Cout(b[i]|b[j])&)
  88. add(i,j);
  89. for (int i=;i<=B;i++)
  90. map[][i]=;
  91. ans=Maximum_Independent_Set();
  92. for (int i=;i<=A;i++)
  93. ans=max(Maximum_Independent_Set(i)+,ans);
  94. for (int i=;i<=A;i++)
  95. if (a[i]&)
  96. for (int j=;j<=A;j++)
  97. if (~a[j]&)
  98. ans=max(Maximum_Independent_Set(i,j)+,ans);
  99. printf("%d",ans);
  100. return ;
  101. }

C++之路进阶——codevs2366(朋友圈)的更多相关文章

  1. (转载) listview实现微信朋友圈嵌套

    listview实现微信朋友圈嵌套 标签: androidlistview 2016-01-06 00:05 572人阅读 评论(0) 收藏 举报  分类: android(8)  版权声明:本文为博 ...

  2. 苹果M1芯片各种不支持,但居然可以刷朋友圈!你会买单吗?

    上个月和大家一起分享过,最新的苹果M1芯片上支持的各种开源软件.什么?还没读过?赶紧点这里:一文解读苹果 M1 芯片电脑上的开源软件. 现在已经过去了半个月,想必有不少的同学都已经入手了最新的苹果M1 ...

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

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

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

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

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

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

  6. UC浏览器 分享到朋友圈和微信好友 分类: JavaScript 2015-04-28 14:45 615人阅读 评论(1) 收藏

    用手机UC浏览器访问新浪微博,会注意到有这样的两个分享按钮: 在手机端浏览器里,点击分享按钮,就可以启动微信客户端并分享到微信.研究了下其源代码,存在这样的一个js:http://mjs.sinaim ...

  7. iOS版微信朋友圈数据库的简要分析

    本文版权归cxun所有,如有转载请注明出处与本文链接,谢谢!原文地址:http://www.cnblogs.com/cxun/p/4550523.html 之前写了一些关于微信聊天记录的博文之后,不少 ...

  8. android接入微信分享(朋友、朋友圈)、QQ分享(好友、空间)

    1.申请注册你的appid 2.下载sdk QQ: http://wiki.open.qq.com/wiki/mobile/SDK%E4%B8%8B%E8%BD%BD 微信:https://open. ...

  9. 微信朋友圈转疯了(golang写小爬虫抓取朋友圈文章)

    很多人在朋友圈里转发一些文章,标题都是什么转疯啦之类,虽然大多都也是广告啦,我觉得还蛮无聊的,但是的确是有一些文章是非常值得收藏的,比如老婆经常就会收藏一些养生和美容的文章在微信里看. 今天就突发奇想 ...

随机推荐

  1. window对象;document对象;

    window对象: DOM:文档对象模型 --树模型文档:标签文档,对象:文档中每个元素对象,模型:抽象化的东西 一:window: 属性(值或者子对象):opener:打开当前窗口的源窗口,如果当前 ...

  2. AMQP协议

    当前各种应用大量使用异步消息模型,并随之产生众多消息中间件产品及协议,标准的不一致使应用与中间件之间的耦合限制产品的选择,并增加维护成本. AMQP是一个提供统一消息服务的应用层标准协议,基于此协议的 ...

  3. SQL Server数据库连接字符串的组成

    DB驱动程序常见的驱动程序如下: ODBC   ODBC(Open Database Connectivity,开放数据库互连)是微软公司开放服务结构(WOSA,Windows Open Servic ...

  4. mac下配置和访问阿里云服务器(Ubuntu系统)

    1.购买云服务器(http://www.aliyun.com/?spm=5176.3047821.1.1.vHFBuw) 注册帐号,在产品页面选择合适的服务器,进入详细页面选择配置,购买. 购买完成后 ...

  5. js实现选项卡

    通过JavaScript实现如上选项卡切换的效果. 实现思路: 一.HTML页面布局 选项卡标题使用ul..li 选项卡内容使用div 二.CSS样式制作 整个选项卡的样式设置 选项卡标题的样式设置 ...

  6. 文明3地图之二-大n型地图

    存档文件:http://files.cnblogs.com/files/xiandedanteng/civ3bigN20160214.rar 地图: 简介: 这份地图几乎没有岛屿,整块大陆都连在一起像 ...

  7. 程序设计: 猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒。(C#语言)

    要求:  1.要有联动性,老鼠和主人的行为是被动的.  2.考虑可扩展性,猫的叫声可能引起其他联动效应. 我么能事件来一步一步来实现: 将要执行的老鼠逃跑,和主人惊醒的行为注册到事件中,猫叫之后引发事 ...

  8. 基础拾掇之——http基础

    基础拾掇之——http基础 http协议介绍 http:Hyper Text Transfer Protocol 超文本传输协议,是互联网应用最为广泛的一种网络协议,主要用于Web服务.通过计算机处理 ...

  9. nginx的内存管理

    先来看内存池的实现,nginx的内存池实现的非常简单. 这里内存池的一些图表可以看老朱同学的slides : http://blog.zhuzhaoyuan.com/2009/09/nginx-int ...

  10. Android设计模式源码解析之Builder模式

    https://github.com/simple-android-framework/android_design_patterns_analysis/tree/master/builder/mr. ...