ssl1344-Knights【最大独立集,最大匹配,图论】

正题


大意

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


解题思路

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/324459.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小课堂?小视频?小商店?

今天&#xff0c;没有什么特别内容可更新&#xff0c;就来随便聊聊吧。01雄雄的小课堂这是一个公众号&#xff0c;内容主要有两大类。一类是以分享编程技术为主&#xff0c;一方面是为了提升自己&#xff0c;另一方面也是为了帮助别人&#xff0c;希望阅者有益&#xff0c;平时…

Entity Framework Core 软删除与查询过滤器

注意&#xff1a;我使用的是 Entity Framework Core 2.0 (2.0.0-preview2-final)。正式版发布后&#xff0c;功能可能存在变动。 继续探索Entity Framework Core 2.0&#xff0c;今天我将探讨如何轻松使用软删除&#xff08;或逻辑删除&#xff09;。我的意思是以透明的方式实…

mybatis 注解传入 list 集合​​​​​​​

转载自 mybatis 注解传入 list 集合 这里写一个查询的sql语句 首先看 mapper SelectProvider(type SqlModel.class, method "listDeviceIndex")Results(value {Result(column "index_id",property "userIndex"),Result(column "de…

ssl1341-Asteroids【最大匹配,最小点覆盖,图论】

正题 大意 一个n*n的矩阵里有m个点&#xff0c;你可以一下打掉一排或以列&#xff0c;求打掉所以点要的最小次数。 如&#xff1a; X.X .X. .X. 显然可以看出只需要打两枪。 解题思路 将行和列分为一个二分图&#xff0c;然后每个点的坐标讲x和y相连。然后求最小点覆盖 …

相比学习好的学生,老师最喜欢努力认真学习的学生

相比学习好的学生&#xff0c;老师还是更喜欢努力学习的学生。好多人有这样的错觉&#xff0c;谁学习好&#xff0c;老师就喜欢谁&#xff0c;谁就是老师面前的大红人&#xff0c;可能有的老师是这样的吧&#xff0c;但是&#xff0c;对于我来说&#xff0c;相比那些学习好的学…

Postgresql快速写入\/读取大量数据(.net)

环境及测试 使用.net驱动npgsql连接post数据库。配置&#xff1a;win10 x64, i5-4590, 16G DDR3, SSD 850EVO. postgresql 9.6.3&#xff0c;数据库与数据都安装在SSD上&#xff0c;默认配置&#xff0c;无扩展。 CREATE TABLE public.mesh (x integer NOT NULL,y integer N…

mybatis更新Blob类型字段要用updateByPrimaryKeyWithBLOBs

转载自 mybatis更新Blob类型字段要用updateByPrimaryKeyWithBLOBs 不会报错也不会更新desc 业务desc数据库类型为Blob 查看源码 解决方案:

ssl1341-最小路径覆盖【最大匹配,最小路径覆盖,图论】

正题 大意 给一个无向图&#xff0c;求最少需要多少条路径可以连接所有点。 解题思路 一个公式就好了 最小路径覆盖数最大匹配数 代码 #include<cstdio> #include<cstring> using namespace std; struct line{int x,y,next; }a[1000]; int link[121],n,m,ls[12…

Ajax实现动态及时刷新表格数据

大家好&#xff0c;我是雄雄&#xff0c;今天分享的技术很简单&#xff0c;即ajax结合jdbc动态实现及时刷新表单数据。前言&#xff1a;相信大家在网上冲浪的时候&#xff0c;肯定会发现这样的场景&#xff0c;在实现某个查询功能时&#xff0c;下方表格中会显示需要展示的结果…

扩展entity framework core实现默认字符串长度,decimal精度,entity自动注册和配置

文章以efcore 2.0.0-preview2.测试验证通过。其他版本不保证使用&#xff0c;但是思路不会差太远。源代码,报道越短&#xff0c;事情越严重&#xff01;文章越短&#xff0c;内容越精悍&#xff01; 目标&#xff1a;1.实现entity的自动发现和mapper设置.2.默认字符串长度&…

SQL语句构建器类

转载自 SQL语句构建器类 问题 Java程序员面对的最痛苦的事情之一就是在Java代码中嵌入SQL语句。这么来做通常是由于SQL语句需要动态来生成-否则可以将它们放到外部文件或者存储过程中。正如你已经看到的那样&#xff0c;MyBatis在它的XML映射特性中有一个强大的动态SQL生成方…

上机不会做?在讲台上做做试试!

上周四班上到了sql语句的查询&#xff0c;正好临近周末&#xff0c;于是就在周末的时候布置了几个增删改查的案例让回家做做。今天随便找了几个人上黑板上做&#xff0c;本以为都没有问题了呢&#xff0c;结果做的一塌糊涂……惨&#xff0c;太惨了&#xff01;当时我就在想&am…

POJ2446-Chessboard【最大匹配,二分图,奇偶建图】

正题 大意 一个n*m的棋盘上有k个洞&#xff0c;将1*2的木条放在上面&#xff0c;不能铺在洞上&#xff0c;不能重叠&#xff0c;求能不能铺满整个棋盘。 解题思路 用点来建立二分图&#xff0c;然后求最大匹配。 但是奇偶建图会快两倍。奇偶建图就是相邻的块可以相连接&…

ASP.NET Core API 版本控制

几天前&#xff0c;我和我的朋友们使用 ASP.NET Core 开发了一个API &#xff0c;使用的是GET方式&#xff0c;将一些数据返回到客户端 APP。我们在前端进行了分页&#xff0c;意味着我们将所有数据发送给客户端&#xff0c;然后进行一些data.length操作&#xff0c;以获得item…

mybatis环境搭建步骤(含配置文件代码)

1.创建web项目2.将所需要的jar包放在项目内&#xff0c;并且build-path3.创建资源文件夹resources4.在资源文件夹中创建xml文件mybatis-config.xml,文件代码如下&#xff1a;<?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE configurationPUB…

【2018.4.14】模拟赛之一-ssl2391 数列

正题 大意 求1到c中属于ab∗k(k∈N∗)ab∗k(k∈N∗)的等差数列中或属于cdk(k∈N∗)cdk(k∈N∗)等比数列中的数的个数。 解题思路 等差数列的个数可以直接用公式计算&#xff0c;然后等比数列枚举的话不会超时&#xff0c;然后用公式去重就好了 代码 #include<iostream>…

多久没有给家里打过电话了?

你多久没有给家里打过电话了&#xff1f;对于我这种常年在外&#xff0c;且工作地距家直线距离都有数百公里的人来说&#xff0c;回家可是一种极大的奢侈啊。貌似自从在济南上班以来&#xff0c;平均每年也就有空回去两次&#xff0c;第一次一般都是有急事需要赶紧赶回去&#…