题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2744

最大团是一个np问题。。

对于本题,做它的逆问题,建反图做最大独立集。

对于A最多取出两个点,枚举一下。

对于B,B是一个二分图。

注意用时间戳加快速度,还有就是注意一下取反的判定(||取反当然是&&

  1. #include<cstring>
  2. #include<iostream>
  3. #include<cstdio>
  4. #include<algorithm>
  5. #define rep(i,l,r) for (int i=l;i<=r;i++)
  6. #define down(i,l,r) for (int i=l;i>=r;i--)
  7. #define clr(x,y) memset(x,y,sizeof(x))
  8. #define maxn 3005
  9. #define inf int(1e9)
  10. using namespace std;
  11. struct data{int obj,pre;
  12. }e[maxn*maxn];
  13. int vis[maxn],head[maxn],a[maxn],b[maxn],mp[maxn][maxn],ban[maxn],mat[maxn],A,B,m,tot,t1,t2,ans;
  14. void insert(int x,int y){
  15. e[++tot].obj=y; e[tot].pre=head[x]; head[x]=tot;
  16. }
  17. int read(){
  18. int x=,f=; char ch=getchar();
  19. while (!isdigit(ch)) {if (ch=='-') f=-; ch=getchar();}
  20. while (isdigit(ch)) {x=x*+ch-''; ch=getchar();}
  21. return x*f;
  22. }
  23. bool count(int x){
  24. int cnt=;
  25. while (x){
  26. x-=x&(-x); cnt++;
  27. }
  28. if ((cnt&)==) return ;
  29. return ;
  30. }
  31. bool dfs(int u){
  32. if (ban[u]==t1) return ;
  33. for (int j=head[u];j;j=e[j].pre){
  34. int v=e[j].obj;
  35. if (ban[v]==t1||vis[v]==t2) continue;
  36. vis[v]=t2;
  37. if (mat[v]==||dfs(mat[v])) {mat[v]=u; return ;}
  38. }
  39. return ;
  40. }
  41. int get(int x=,int y=){
  42. clr(mat,);
  43. t1++;
  44. int cnt=;
  45. rep(i,,B) if (mp[x][i]||mp[y][i]) ban[i]=t1,++cnt;
  46. rep(i,,B){
  47. ++t2;
  48. if (dfs(i)) cnt++;
  49. }
  50. return(B-cnt);
  51. }
  52. int main(){
  53. A=read(); B=read(); m=read();
  54. rep(i,,A) a[i]=read();
  55. rep(i,,B) b[i]=read();
  56. clr(mp,);
  57. rep(i,,m){
  58. int x=read(),y=read(); mp[x][y]=;
  59. }
  60. rep(i,,B) mp[][i]=;
  61. rep(i,,B) if (b[i]&){
  62. rep(j,,B) if (!(b[j]&)&&count(b[i]|b[j])) insert(i,j);
  63. }
  64. ans=get();
  65. rep(i,,A) ans=max(ans,get(i)+);
  66. rep(i,,A) if (a[i]&)
  67. rep(j,,A) if (!(a[j]&)) ans=max(ans,get(i,j)+);
  68. printf("%d\n",ans);
  69. return ;
  70. }

BZOJ2744: [HEOI2012]朋友圈的更多相关文章

  1. BZOJ2744:[HEOI2012]朋友圈(最大团,乱搞)

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

  2. BZOJ2744 HEOI2012朋友圈(二分图匹配)

    先考虑B国.容易发现a xor b mod 2=0即二进制末位相同,那么可以据此将所有人分成两部分,每一部分各自是一个完全图.然后再将a or b有奇数个1的边连上,现在需要求的就是这样一个图里的最大 ...

  3. bzoj2744 [HEOI2012]朋友圈——二分图匹配

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2744 首先,求一个图的最大团等价于求它的补图的最大独立集,而二分图的最大独立集 = 总点数 ...

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

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

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

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

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

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

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

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

  8. luogu P2423 [HEOI2012]朋友圈 (最大团)

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

  9. 【二分图】HEOI2012 朋友圈

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

随机推荐

  1. 最长回文子序列(LPS)

    问题描述: 回文是正序与逆序相同的非空字符串,例如"civic"."racecar"都是回文串.任意单个字符的回文是其本身. 求最长回文子序列要求在给定的字符串 ...

  2. IT服务(运维)管理实施的几个要点--序言

    IT服务(运维)管理(不是IT运维技术)是IT行业当中相对比较"窄"的一个分支,通常只被金融.电信等大型数据中心的中高层管理人员所关注.但是根据笔者多年从事IT服务和服务管理的经验 ...

  3. Ubuntu配置Django+ Apache2+ mysql

    # 我的Ubuntu上自带的python3.5,所以安装一下 python3.6sudo add-apt-repository ppa:jonathonf/python-3.6sudo apt-get ...

  4. lodash源码分析之NaN不是NaN

    暗恋之纯粹,在于不求结果,完全把自己锁闭在一个单向的关系里面. --梁文道<暗恋到偷窥> 本文为读 lodash 源码的第五篇,后续文章会更新到这个仓库中,欢迎 star:pocket-l ...

  5. Linux整合Apache和SVN

    1.安装APR-1.2.7和APR-util-1.2.7  (下载地址:http://apr.apache.org/) #tar zxvf  apr-1.2.7.tar.gz #cd   apr-1. ...

  6. 关于oracle数据库 跨表查询建立 视图的方法

    工作中很多时候都会遇到需要将两个不同的表空间甚至数据库的表进行联合查询或者建立视图的情况. 不同的表空间查询我们可以通过在将要查询的表前面加上 表空间的对应的用户名来实现,如有两个表空间分别对应两个用 ...

  7. 遍历文件 创建XML对象 方法 python解析XML文件 提取坐标计存入文件

    XML文件??? xml即可扩展标记语言,它可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言. 里面的标签都是可以随心所欲的按照他的命名规则来定义的,文件名为roi.xm ...

  8. Python简单小程序练习

    1.九九乘法表 #!/usr/bin/python for i in range(1,10): for j in range(i): j += 1 print ("%d * %d = %-2 ...

  9. 深入学习Java8 Lambda (default method, lambda, function reference, java.util.function 包)

    Java 8 Lambda .MethodReference.function包 多年前,学校讲述C#时,就已经知道有Lambda,也惊喜于它的方便,将函数式编程方式和面向对象式编程基于一身.此外在使 ...

  10. PE文件详解二

    本文转自小甲鱼的PE文件相关教程,原文传送门 咱接着往下讲解IMAGE_OPTIONAL_HEADER32 结构定义即各个属性的作用! 接着我们来谈谈 IMAGE_OPTIONAL_HEADER 结构 ...