Analysis

这道题跟前几道题差不多,依旧是匈牙利算法求二分图匹配,在连边的时候,要连两个矛盾的位置(即一个骑士和其控制的位置)。然后就跑一遍匈牙利算法就好了。

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 #define maxn 110
 6 using namespace std;
 7 inline int read()
 8 {
 9     int x=0;
10     bool f=1;
11     char c=getchar();
12     for(; !isdigit(c); c=getchar()) if(c=='-') f=0;
13     for(; isdigit(c); c=getchar()) x=(x<<3)+(x<<1)+c-'0';
14     if(f) return x;
15     return 0-x;
16 }
17 inline void write(int x)
18 {
19     if(x<0){putchar('-');x=-x;}
20     if(x>9)write(x/10);
21     putchar(x%10+'0');
22 }
23 struct node
24 {
25     int to,nex;
26 }edge[20*(maxn*maxn+10)];
27 int n,m,t,cnt,ans;
28 int head[20*(maxn*maxn+10)],match[20*(maxn*maxn+10)];
29 bool map[maxn*10][maxn*10],book[20*(maxn*maxn+10)];
30 int dir1[10]={0,1,-1,1,-1,2,-2,2,-2},dir2[10]={0,2,2,-2,-2,1,1,-1,-1};
31 inline void add(int x,int y)
32 {
33     cnt++;
34     edge[cnt].to=y;
35     edge[cnt].nex=head[x];
36     head[x]=cnt;
37 }
38 inline bool dfs(int u)
39 {
40     for(int i=head[u];i;i=edge[i].nex)
41     {
42         int v=edge[i].to;
43         if(!book[v])
44         {
45             book[v]=1;
46             if(!match[v]||dfs(match[v]))
47             {
48                 match[v]=u;
49                 return true;
50             }
51         }
52     }
53     return false;
54 }
55 inline int calculation(int x,int y){return m*(x-1)+y;}
56 int main()
57 {
58     n=read();m=read();t=read();
59     for(int i=1;i<=t;i++)
60     {
61         int x,y;
62         x=read();y=read();
63         map[x][y]=1;
64     }
65     for(int i=1;i<=n;i++)
66         for(int j=1;j<=m;j++)
67             if(!map[i][j])
68             {
69                 for(int k=1;k<=8;k++)
70                 {
71                     int mi=i+dir1[k],mj=j+dir2[k];
72                     if(mi>0&&mj>0&&mi<=n&&mj<=m&&!map[mi][mj]&&(mi+mj)%2==1)
73                     {
74                         add(calculation(i,j),calculation(mi,mj));
75                     }
76                 }
77             }
78     for(int i=1;i<=calculation(n,m);i++)
79     {
80         memset(book,0,sizeof(book));
81         if(dfs(i))ans++;
82     }
83     write(n*m-ans-t);
84     return 0;
85 }
请各位大佬斧正(反正我不认识斧正是什么意思)

转载于:https://www.cnblogs.com/handsome-zyc/p/11248580.html

AcWing P378 骑士放置 题解相关推荐

  1. AcWing 378. 骑士放置 题解

    原题链接 题目描述 给定一个 N*M 的棋盘,有一些格子禁止放棋子. 问棋盘上最多能放多少个不能互相攻击的骑士(国际象棋的"骑士",类似于中国象棋的"马",按照 ...

  2. Acwing 378.骑士放置(二分图的最大独立集)

    Acwing 378.骑士放置 题意 给定一个 N×M 的棋盘,有一些格子禁止放棋子. 问棋盘上最多能放多少个不能互相攻击的骑士(国际象棋的"骑士",类似于中国象棋的"马 ...

  3. AcWing 378. 骑士放置(最大独立集)

    题目 给定一个 N*M 的棋盘,有一些格子禁止放棋子. 问棋盘上最多能放多少个不能互相攻击的骑士(国际象棋的"骑士",类似于中国象棋的"马",按照"日 ...

  4. Acwing 378. 骑士放置

    题目描述: 给定一个 N×M 的棋盘,有一些格子禁止放棋子. 问棋盘上最多能放多少个不能互相攻击的骑士(国际象棋的"骑士",类似于中国象棋的"马",按照&quo ...

  5. `Algorithm-Solution` `AcWing` 378. 骑士放置

    link Solution If we add the edge a−ba-ba−b where if a=(x,y)a=(x,y)a=(x,y) then bbb is the endpoint i ...

  6. 378 骑士放置(最大独立集)

    1. 问题描述: 给定一个 N×M 的棋盘,有一些格子禁止放棋子.问棋盘上最多能放多少个不能互相攻击的骑士(国际象棋的"骑士",类似于中国象棋的"马",按照&q ...

  7. 二分图——骑士放置(最大独立集)

    骑士放置 给定一个 N*M 的棋盘,有一些格子禁止放棋子. 问棋盘上最多能放多少个不能互相攻击的骑士(国际象棋的"骑士",类似于中国象棋的"马",按照" ...

  8. 骑士放置 Page435 最大独立集

    骑士放置 Page435 最大独立集 棋盘问题首先黑白染色 马移动的曼哈顿距离是3,必然是从白走到黑或者从黑走到白 这题折腾了俩小时,就因为递归那里懒得写int,直接用了个全局变量,根本检查不出来,人 ...

  9. 算法竞赛进阶指南 骑士放置

    4: 最大独立集 :选出最多的点,使得选出的点之间没有边. 求最大独立集:选出最小的点可以破坏所有的边 <==>最小点覆盖 <==>最大匹配数. 假设最大匹配数为m,共有n个点 ...

最新文章

  1. 1.4 微生物对人类社会的影响
  2. Linux下tomcat内存溢出分析及优化
  3. 与Brian Goetz聊Java的数据类
  4. 插入排序 链表 java_JAVA单链表(多项式)直接插入排序,大家看看我的怎么不行呢...
  5. 修改使用计算机的名称,Windows 10中修改计算机名称的方法,你知道几种?
  6. c++错误functional:1526:9: error: no type named ‘type’ in ‘class std::result_of
  7. web 三联发票针式打印_不要买二手激光打印机,公开咸鱼卖家套路
  8. QT5开发及实例学习之九基本对话框(二)
  9. 自己定义控件-仿iphone之ToggleButtonamp;VoiceSeekBar
  10. kaggle入门题Titanic
  11. Java开发笔记(八十六)通过缓冲区读写文件
  12. 关于VS2005安装项目制作的三个参考文章链接
  13. ios App内评价问题
  14. 最新修复版电影网站源码_2021版米酷影视v7.2.1源码 修复幻灯片 分类网址错误
  15. 计算机控制的液压提升,LSD液压提升系统(2008).doc
  16. Win10家庭版使用gpedit.msc方法
  17. 台式机创建文件服务器,如何将台式机做成云存储服务器
  18. gym 101908C Pizza Cutter (逆序对)
  19. 装机出现“我们检测到您的硬盘是GPT格式但未找到ESP分区”解决方法
  20. 养什么最赚钱成本最低?盘点几个合适的项目!

热门文章

  1. DARNED:RNA编辑位点数据库
  2. C语言扫雷(附标记展开功能)
  3. 不忘初心,做一行爱一行
  4. MAMP使用简单教程
  5. 万佳安联手腾讯云,传统安企开启 AI 新征程
  6. 搭建java开发环境
  7. css中设置了font-family: 微软雅黑没有用
  8. LEHDLAB_实验流程
  9. [事务] 事务的回滚机制
  10. 国家基础地理信息中心行政边界等矢量数据免费下载保姆级教程--关于地理数据收集与处理的基本工具推荐(7)