题目: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. Java.util.Map排序输出

    在java的众多Map实现中,Map基本上是不能保证顺序的(LinkedHashMap可以保证插入顺序或者访问顺序,TreeMap默认按照key升序但可以自定义Comparator),在开发过程中当数 ...

  2. 为了CET-4!

    Directions For tiis part,you are allowed 30 minutes to write an essay.Suppose there are two options ...

  3. softmax分类算法原理(用python实现)

    逻辑回归神经网络实现手写数字识别 如果更习惯看Jupyter的形式,请戳Gitthub_逻辑回归softmax神经网络实现手写数字识别.ipynb 1 - 导入模块 import numpy as n ...

  4. Search an Element in an array

    Given an integer array and an element x, find if element is present in array or not. If element is p ...

  5. BZOJ1036 (其实这只是一份板子)

    我说我是不是完蛋了啊... ...昨天考试线段树写错,调了好久才调回来:今天做这道树链剖分辣鸡操作题,TM写错了4个地方!先是建树为了省常数打了一个build结果初值赋错了,然后又是线段树!getma ...

  6. Web API系列之三 基本功能实现

    Web API系列之二讲解了如何搭建一个WebApi的基架,本文主要在其基础之上实现基本的功能.下面开始逐步操作: 一.配置WebApi的路由-用于配置外部如何访问内部资源的url的规则 1.添加Gl ...

  7. 优化设计提高sql类数据库的性能

    前言 在一个项目中,技术的统一性是最重要的,数据库的设计则是重点中的重点.NoSQL 是目前最流行的数据库,但是其实用性和功能性远不如sql数据库. 实际很多SQL数据库被诟病的性能问题大多是源于程序 ...

  8. 一、JavaSE语言概述

    1.软件:系统软件 VS 应用软件 2.人与计算交互:使用计算机语言.图形化界面VS命令行. 3.语言的分类:第一代:机器语言 第二代:汇编语言 第三代语言:高级语言(面向过程-面向对象) 4.jav ...

  9. linux下搜索指定内容

    echo " ls *.$2 | while read file;do out=$( (grep -n $1 $file) ) [ -n \"$out\" ] & ...

  10. yield next和yield* next的区别

    yield next和yield* next之间到底有什么区别?为什么需要yield* next?经常会有人提出这个问题.虽然我们在代码中会尽量避免使用yield* next以减少新用户的疑惑,但还是 ...