http://www.lydsy.com/JudgeOnline/problem.php?id=4808

题意:

思路:

这图中的两个马只能选一个,二选一,很像二分图吧,对能互吃的两个棋子连线,在所选的任意两个棋子中,都不能互相有连线,这不就是最大点独立集吗?

最大独立集 = 顶点个数 - 最大匹配。记得把坏了的格子去掉。

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. using namespace std;
  5.  
  6. int n,m,tot;
  7. int mp[][], head[], mark[];
  8. bool vis[];
  9.  
  10. struct node
  11. {
  12. int v,next;
  13. }e[*];
  14.  
  15. int dx[] = {-,-,-,-,,,,};
  16. int dy[] = {,-,,-,,-,,-};
  17.  
  18. void addEdge(int u, int v)
  19. {
  20. e[tot].v = v;
  21. e[tot].next = head[u];
  22. head[u] = tot++;
  23. }
  24.  
  25. bool match(int u)
  26. {
  27. for(int i=head[u];i!=-;i=e[i].next)
  28. {
  29. int v = e[i].v;
  30. if(!vis[v])
  31. {
  32. vis[v] = true;
  33. if(mark[v]==- || match(mark[v]))
  34. {
  35. mark[v] = u;
  36. return true;
  37. }
  38. }
  39. }
  40. return false;
  41. }
  42.  
  43. int main()
  44. {
  45. //freopen("in.txt","r",stdin);
  46. int num = ;
  47. scanf("%d%d",&n,&m);
  48. for(int i=;i<=n;i++)
  49. for(int j=;j<=m;j++)
  50. {
  51. scanf("%d",&mp[i][j]);
  52. if(mp[i][j]) num++;
  53. }
  54. tot = ;
  55. memset(head,-,sizeof(head));
  56. for(int i=;i<=n;i++)
  57. for(int j=;j<=m;j++)
  58. {
  59. if(!mp[i][j])
  60. {
  61. for(int k=;k<;k++)
  62. {
  63. int x = i+dx[k];
  64. int y = j+dy[k];
  65. if(x< || x>n || y< || y>m) continue;
  66. if(mp[x][y]==) continue;
  67. int p1 = (i-)*m+j;
  68. int p2 = (x-)*m+y;
  69. addEdge(p1,p2);
  70. }
  71. }
  72. }
  73. int sum = ;
  74. memset(mark,-,sizeof(mark));
  75. for(int i=;i<=n*m;i++)
  76. {
  77. memset(vis,false,sizeof(vis));
  78. if(match(i)) sum++;
  79. }
  80. printf("%d\n",n*m-num-sum/);
  81. return ;
  82. }

BZOJ 4808: 马(二分图最大点独立集)的更多相关文章

  1. BZOJ 4808 马 二分图最大独立集

    题目应该就是最大独立集了吧,没什么了,平面图求最大独立集需要/2的, WQH说加直接+双向边考研过,结果真的过了,应该是匈牙利算法寻找的 时候更加快了吧.(方便找边) #include<cstd ...

  2. BZOJ 1143: [CTSC2008]祭祀river(二分图最大点独立集)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1143 题意: 思路: 二分图最大点独立集,首先用floyd判断一下可达情况. #include< ...

  3. LightOJ1171 Knights in Chessboard (II)(二分图最大点独立集)

    题目 Source http://www.lightoj.com/volume_showproblem.php?problem=1171 Description Given an m x n ches ...

  4. POJ1466 Girls and Boys(二分图最大点独立集)

    最大点独立集就是无向图中最多的两两不相邻的点集. 二分图最大点独立集=顶点数-二分图最大边独立集(二分图最大匹配) 这一题男女分别作YX部,如果x和y有浪漫关系则连边,如此构造二分图,答案显然就是最大 ...

  5. 【bzoj4808】【马】二分图最大点独立集+简单感性证明

    (上不了p站我要死了,侵权度娘背锅) Description 众所周知,马后炮是中国象棋中很厉害的一招必杀技."马走日字".本来,如果在要去的方向有别的棋子挡住(俗称"蹩 ...

  6. POJ 2771 Guardian of Decency (二分图最大点独立集)

    Guardian of Decency Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 6133   Accepted: 25 ...

  7. 解题:BZOJ 4808 马

    题面 以前写过的题,翻出来学习网络流写二分图匹配,因为复杂度更优秀,$Dinic$是$O(sqrt(n)m)$哒~ 原点向左部点连流量为$1$的边,左部点向对应右部点连流量为$1$的边,右部点向汇点连 ...

  8. bzoj 4808: 马【匈牙利算法】

    网格图黑白染色,然后能互相攻击到的点之间连边,跑匈牙利算法最大匹配,答案是好点个数-最大匹配(最大独立集) 注意pao的时候只从一种颜色的格子统计即可 #include<iostream> ...

  9. HDU--3829--Cat VS Dog【最大点独立集】

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=3829 题意:动物园有n条狗.m头猫.p个小孩,每一个小孩有一个喜欢的动物和讨厌的动物.如今动物园要转移一些 ...

随机推荐

  1. canvas绘图,html5 k线图,股票行情图

    canvas绘图,html5 k线图,股票行情图 canvas跟其他标签一样,也可以通过css来定义样式.但这里需要注意的是:canvas的默认宽高为300px * 150px,在css中为canva ...

  2. 自写Jquery插件 Tab

    原创文章,转载请注明出处,谢谢!https://www.cnblogs.com/GaoAnLee/p/9067017.html 每每看到别人写的Jquery插件,自己也试着学习尝试,终有结果,废话不多 ...

  3. makefile 变量展开

    Makefile中给变量赋值: =     是递归展开式变量 value1 = 5 value2 = $(value1) value1 = 6 最终$(value2)就变成了6 :=    是直接展开 ...

  4. OLED屏幕那些次像素有趣的排列方式

    http://www.dzsc.com/data/2016-6-2/109856.html 我们今天的重点内容为倒数第二列内容的上半部分,也就是RGB排列和Pentile排列.在介绍OLED屏幕时候我 ...

  5. mysql执行计划查看工具explain

    在优化sql语句时,我们经常会用到explain语句,这里对explain语句做一个详细的总结说明. The EXPLAIN statement provides information about ...

  6. url去重 --布隆过滤器 bloom filter原理及python实现

    https://blog.csdn.net/a1368783069/article/details/52137417 # -*- encoding: utf-8 -*- ""&qu ...

  7. php脚本#!/usr/bin/env php写法的好处

    脚本语言的第一行,目的就是指出,你想要你的这个文件中的代码用什么可执行程序去运行它.比如php脚本的第一行可以写成如下几种格式#!/usr/bin/php#!/usr/bin/env php#!/us ...

  8. P2698 [USACO12MAR]花盆Flowerpot(单调队列+二分)

    P2698 [USACO12MAR]花盆Flowerpot 一看标签........十分后悔 标签告诉你单调队列+二分了............ 每次二分花盆长度,蓝后开2个单调队列维护最大最小值 蓝 ...

  9. Kali系列之aircrack-ng wifi密码穷举

    kali linux安全渗透 网卡:rtl8187 工具aircrack-ng 操作+ 查看无线网卡信息 ifconfig 或者 iwconfig 有个是wlan0的就是您的外置无线网卡 启动网卡监听 ...

  10. [c/c++] programming之路(2)、kill QQ,弹出系统对话框,吃内存等

    一.删除文件 二.盗取密码的原理 #include<stdlib.h> //杀掉QQ,然后提示网络故障,请重新登陆,弹出高仿界面,获取账号密码,然后打开QQ进行登录 void main() ...