★★☆   输入文件:knight.in   输出文件:knight.out   简单对比
时间限制:1 s   内存限制:128 MB 骑士共存问题
«问题描述:
在一个n*n个方格的国际象棋棋盘上,马(骑士)可以攻击的棋盘方格如图所示。棋盘

上某些方格设置了障碍,骑士不得进入。

«编程任务:
对于给定的n*n个方格的国际象棋棋盘和障碍标志,计算棋盘上最多可以放置多少个骑
士,使得它们彼此互不攻击。
«数据输入:
由文件knight.in给出输入数据。第一行有2 个正整数n 和m (1<=n<=200, 0<=m<=n*n)
分别表示棋盘的大小和障碍数。接下来的m 行给出障碍的位置。每行2 个正整数,表示障
碍的方格坐标。
«结果输出:
将计算出的共存骑士数输出到文件knight.out。
输入文件示例 输出文件示例
knight.in
3 2
1 1

3 3

knight.out

思路

网络流

http://www.cnblogs.com/shenben/p/6259661.html

代码实现

 1 #include<cstdio>
 2 #include<cstring>
 3 const int maxn=800;
 4 const int maxs=maxn*maxn;
 5 inline int min_(int x,int y){return x<y?x:y;}
 6 int n,m,s,t,ans;
 7 int a,b,nh,nl;
 8 int map[maxn][maxn];
 9 int hb[]={-2,-1,1,2,2,1,-1,-2};
10 int lb[]={1,2,2,1,-1,-2,-2,-1};
11 int h[maxs],hs=1,ew[maxs],et[maxs],en[maxs];
12 void add(int u,int v){
13     ++hs,ew[hs]=1,et[hs]=v,en[hs]=h[u],h[u]=hs;
14     ++hs,ew[hs]=0,et[hs]=u,en[hs]=h[v],h[v]=hs;
15 }
16 int q[maxs],head,tail;
17 int d[maxs];
18 void bfs(){
19     memset(d,0,sizeof(d));
20     head=tail=0;
21     q[head++]=s,d[s]=1;
22     while(head>tail){
23         a=q[tail++];
24         for(int i=h[a];i;i=en[i])
25         if(!d[et[i]]&&ew[i]){
26             d[et[i]]=d[a]+1;
27             if(et[i]==t) return;
28             q[head++]=et[i];
29         }
30     }
31 }
32 int ap(int k,int w){
33     if(k==t) return w;
34     int dw=w;
35     for(int i=h[k];i&&dw;i=en[i])
36     if(ew[i]&&d[et[i]]==d[k]+1){
37         int wt=ap(et[i],min_(dw,ew[i]));
38         if(wt) ew[i]-=wt,ew[i^1]+=wt,dw-=wt;
39         else d[et[i]]=0;
40     }
41     return w-dw;
42 }
43 void Dinic(){while(bfs(),d[t]) ans-=ap(s,ans);}
44 int main(){
45     freopen("knight.in","r",stdin);
46     freopen("knight.out","w",stdout);
47     scanf("%d%d",&n,&m);
48     s=0,t=1,ans=n*n-m;
49     for(int i=1;i<=n;i++)
50     for(int j=1;j<=n;j++)
51     map[i][j]=i&1^j&1;
52     for(int i=1;i<=m;i++){
53         scanf("%d%d",&a,&b);
54         map[a][b]=2;
55     }
56     for(int i=1;i<=n;i++)
57     for(int j=1;j<=n;j++)
58     if(!map[i][j]){
59         add(s,i*n+j);
60         for(int k=0;k<8;k++){
61             nh=i+hb[k],nl=j+lb[k];
62             if(nh>0&&nh<=n&&nl>0&&nl<=n&&map[nh][nl]==1)
63             add(i*n+j,nh*n+nl);
64         }
65     }
66     else if(map[i][j]==1) add(i*n+j,t);
67     Dinic();
68     printf("%d\n",ans);
69     return 0;
70 }

转载于:https://www.cnblogs.com/J-william/p/7061885.html

[COGS746] [网络流24题] 骑士共存相关推荐

  1. 网络流24题-骑士共存

    题目点这里 题目or在这里 题意就略过了 现将棋盘黑白染色 建立超级源(s)和超级汇(t) edge(s,黑,1) edge(白,t,1) edge(黑,白,1) 考虑s->黑->白-&g ...

  2. loj #6226. 「网络流 24 题」骑士共存问题

    #6226. 「网络流 24 题」骑士共存问题 题目描述 在一个 n×n\text{n} \times \text{n}n×n 个方格的国际象棋棋盘上,马(骑士)可以攻击的棋盘方格如图所示.棋盘上某些 ...

  3. [网络流24题][CODEVS1922]骑士共存问题(最大流)

    问题描述 传送门 题解 首先介绍ATP神犇的做法: 和方格取数3几乎一样,黑白染色,可以发现能攻击到的点颜色不同. 那么从超级源向每一个黑点连边,容量为1,从每一个白点向超级汇连边,容量为1:从黑点向 ...

  4. 解题报告:线性规划与网络流24题

    目录 A.飞行员配对方案问题 (二分图最大匹配)(最大流)[提高+/省选- ] B.太空飞行计划问题(最大权闭合图转最小割.最小割方案输出)[省选/NOI- ] C.最小路径覆盖问题(有向无环图最小路 ...

  5. 「网络流24题」 题目列表

    「网络流24题」 题目列表 序号 题目标题 模型 题解 1 飞行员配对方案问题 二分图最大匹配 <1> 2 太空飞行计划问题 最大权闭合子图 <2> 3 最小路径覆盖问题 二分 ...

  6. 【算法】【网络流24题】巨坑待填(成功TJ,有时间再填)

    ------------------------------------------------------------------------------------ 17/24 --------- ...

  7. 【题解】网络流24题一句话题解集合

    最近写了下<线性规划与网络流24题>,发下代码和题解,事实上就是将交给cycycy的题解复制一下 T1 飞行员配对方案问题 solution 裸的匈牙利 code #include< ...

  8. cwl的网络流24题练习

    网络流24题 编号 题目 备注 1 飞行员配对方案问题 二分图最大匹配,可最大流解决 2 太空飞行计划问题   3 最小路径覆盖问题  有向图最小路径覆盖,解法都写题目上了 4 魔术球问题  有向图最 ...

  9. 【线性规划和网络流24题】

    (1)飞行员配对方案问题:二分图最大匹配. 思路:略. View Code 1 #include<cstdio> 2 #include<cstring> 3 #define M ...

最新文章

  1. 拜托,面试别再问我时间复杂度了!!!
  2. react 返回一个页面_Fiber 内部: 深入理解 React 的新 reconciliation 算法
  3. 谈谈一些有趣的CSS题目(五)-- 单行居中,两行居左,超过两行省略
  4. docker电子书_果然!这10个Docker容器坑多数人都中招过
  5. python3读取csv和xlsx文件
  6. PYTHON之DEF
  7. mysql配置master_mysql 主从配置(master/slave)
  8. c++ string 回文串_第33期:上海自来水来自海上,回文字符串验证!
  9. elasticsearch 文档_ElasticSearch系列04:索引与文档的CURD
  10. Mysql —— 索引的使用顺序
  11. 【Objective-C】Objective-C语言的动态性
  12. AppScan报错--发生内部错误
  13. 十三、VMware vSphere 6.7虚拟化云管理之13、VCSA6.7设置主机许可
  14. html js创建表格,javascript创建表格方式详解
  15. 十个接私活赚外快的网站,你有技术就有钱
  16. Android/Linux招聘要求
  17. (转)金蝶KIS迷你版、标准版在查询数量金额明细账时提示“发生未知错误,系统当前操作被取消,请与金蝶公司联系”...
  18. stm32F407按键例程安富莱
  19. 【dva】dva使用与实现(七)
  20. 上海交通大学学生生存手册_给学生的生存技巧

热门文章

  1. 将vue部署在nginx上
  2. 任务调度与上下文切换时间测试
  3. 在解决计算机主机,电脑主机噪音大怎么办 电脑主机噪音大解决方法【图文】...
  4. c++错误之map的find()返回值类型
  5. 8086汇编-实验8-jmp指令的理解
  6. 8086CPU写汇编的规则
  7. 十大排序算法之插入排序
  8. linux su和sudo命令的区别
  9. JQuery------各种版本下载
  10. eclipse maven创建web项目