正题


大意

求在一个扣掉m个格子的n*n的棋盘能放置的最多的马。


解题思路

求最大独立集就好了,最大独立集=点数-最大匹配数。最重要的是如何建图。定义一个数组point[i][j]表示点的编号。但是如果这样的话就会O(n4)O(n4)O(n^4)就会超时。现在我们把棋盘从左到右后从上到下标号,那这样奇数就攻击不到奇数,偶数就攻击不到偶数,然后分两边构图,就可以O(n4/2)O(n4/2)O(n^4/2)。


代码

#include<cstdio>
#include<cstring>
using namespace std;
int one,two,n,m,link[20001],ddx,ddy,w,s,zx[20001],zy[20001],point[201][201];
int tot,dx[8]={1,1,-1,-1,2,2,-2,-2},dy[8]={2,-2,2,-2,1,-1,1,-1};
bool a[201][201],cover[20001];
bool find(int i)//求最大匹配
{
    int k=0;
    for (int j=0;j<8;j++)
    {        if (zx[i]+dx[j]<1 || zy[i]+dy[j]<1 || zx[i]+dx[j]>n || zy[i]+dy[j]>n) continue;
        k=point[zx[i]+dx[j]][zy[i]+dy[j]];//记录
        if (!a[zx[i]+dx[j]][zy[i]+dy[j]] && !cover[k])
        {            int q=link[k];
            link[k]=i;
            cover[k]=true;
            if (!q || find(q)) return true;
            link[k]=q;
        }
    }
    return false;
}
int main()
{
    scanf("%d%d",&n,&m);
    for (int i=1;i<=m;i++)
    {
      scanf("%d%d",&ddx,&ddy);
      a[ddx][ddy]=true;
    }
    for (int i=1;i<=n;i++)
      for (int j=1;j<=n;j++)
      {          if (!a[i][j])
          {            if ((i+j)%2==0) point[i][j]=++two;//标号
            else
            {              point[i][j]=++one;//标号
              zx[one]=i;//记录坐标
              zy[one]=j;
            }
          }
      }
    s=0;
    for (int i=1;i<=one;i++)
    {      memset(cover,0,sizeof(cover));
      if (find(i)) s++;//找最大匹配数
    }
    printf("%d",n*n-m-s);
}

ssl1344-Knights【最大独立集,最大匹配,图论】相关推荐

  1. ZOJ1654-Place the Robots【最大匹配,图论】

    正题 大意 一个n*m个地方,有墙,草地和空地.在空地可以放机器人,机器人会将看到的其他机器人 [河蟹] 掉.他不能隔墙看.求最多能放多少个机器人. 解题思路 这里用一种奇特的构图方法, (盗一下pp ...

  2. ssl1333-地鼠的困境【二分图,最大匹配,图论】

    正题 大意 有n个地鼠有m个地洞,每只地鼠的速度都是v.若不在s秒之内回到地洞就会狗带,每只地洞只能躲一只地鼠,求能活下来多少只 代码 #include<cstdio> #include& ...

  3. ssl1335-最佳派对【二分图,最大匹配,图论】

    正题 题目 有n个中国学生与若干个外国学生,一些中国学生与外国学生之间可以很好的配对,求能配成的最多对数 解题思路 二分图匈牙利算法 代码 #include<cstdio> #includ ...

  4. 二分图-匈牙利算法模板

    二分图就不赘述了,我在知识资料整理有相关资料. .最大匹配  .最小路径覆盖  .最小点覆盖  .最大独立集 最大匹配:二分图中边集最大的那个匹配 最小路径(边)覆盖:用尽量小的不想交简单路径覆盖有向 ...

  5. [学习笔记] 二分图基础定理的相关证明

    最小点集覆盖=最大匹配 最小点集覆盖:选出最少的点使得每条边都至少有一个端点被选. 先证最小点集覆盖 ≥\ge≥ 最大匹配 假设最大匹配为 xxx,即有 xxx 条边两两之间没有公用点. 光覆盖这些边 ...

  6. 2019暑假牛客第5场-F.maximum clique 1-最大独立集(输出方案)

    题面: 思路: 建图方法若两个数有且仅有一个位不同,那么连边(从左边指向右边). 根据某个数的二进制表达式中有奇数个1还是偶数个1,分成左边和右边. 对于二分图,跑匈牙利求最大匹配,最大独立集=节点数 ...

  7. 最大匹配、最小顶点覆盖、最大独立集、最小路径覆盖(转)

    在讲述这两个算法之前,首先有几个概念需要明白: 二分图:  二分图又称二部图,是图论中的一种特殊模型.设G=(V,E)是一个无向图,如果顶点V可以分割为两个互不相交的子集(A,B),并且图中的每条边( ...

  8. 图论——最大团问题和最大独立集、二分图相关

    文章目录 最大团问题和最大独立集 二分图.用网络流解决最大二分匹配的方法 一种另类的增广路--交替路.匈牙利算法 一般图.二分图中的其它性质 P1640 [SCOI2010]连续攻击游戏 最大团问题和 ...

  9. [图论总结] 最大独立集(例题:Code Names)

    [图论总结1] 最大独立集的概念 独立集 匹配 概念之间的关系及性质 例题 最大独立集的概念 独立集 来自oi-wiki 在上面的描述中,V是代表的点集,而E代表的是边集 独立集以及最大独立集均是点的 ...

最新文章

  1. 【Spring Security】五、自定义过滤器
  2. 量子位MEET大会正式启动!邀AI企业共同预见智能科技新未来
  3. 64位百度云 catia v6_逃狱兄弟百度云资源已更新,1080P高清资源分享64
  4. pip download的使用记录
  5. Elasticsearch 集群平衡配置
  6. java项目功能详情介绍,JAVAEE—spring的详细介绍
  7. 4 SAP权限PFCG操作手册
  8. 车机没有carlife可以自己下载吗_路咖评:新宝骏的车机系统 革了百度Carlife的命?...
  9. Ember.js之动态创建模型
  10. 页面可用性之浏览器默认字体与CSS 中文字体
  11. 国外大牛开发者创造出Siri第三方服务器
  12. eclipse窗口设置
  13. 计算机类专业数学分数,同济大学计算机专业数学分数
  14. 打开速达服务器出现系统通知,速达7000重装后,启动网络版服务器时会提示程序版本与数据库版本不一致...
  15. android安卓-子线程计时器TimeCountThread-时分秒-实用功能系列
  16. 身份证上传尺寸太大如何缩小?改照片尺寸的简单方法
  17. 【人工智能】2.博弈问题、博弈搜索策略
  18. UI设计师平时都用什么设计软件工具?
  19. csma研究背景_以太网CSMA_CD工作原理研究
  20. IOS App的简单开发实例

热门文章

  1. 全国计算机考试光盘,全国计算机一级模拟考试题(光盘).doc
  2. python爬取网页数据软件_python爬虫入门10分钟爬取一个网站
  3. 四川中级职称计算机考试考b级,四川省职称计算机B级考试1卷
  4. 禁用笔记本键盘_如何禁用/启用笔记本内置键盘?
  5. LeetCode 783二叉搜索树节点最小距离-简单
  6. java8 stream案例分析
  7. 数据结构与索引-- mysql InnoDB存储引擎索引
  8. icoding复习6 图
  9. P4602 [CTSC2018]混合果汁(主席树)
  10. HDU - 7054 Yiwen with Formula 分治拆位FFT + dp + 费马小定理降幂