[网络流24题] 骑士共存(cogs 746)
骑士共存问题
«问题描述:
在一个n*n个方格的国际象棋棋盘上,马(骑士)可以攻击的棋盘方格如图所示。棋盘
上某些方格设置了障碍,骑士不得进入。
«编程任务:
对于给定的n*n个方格的国际象棋棋盘和障碍标志,计算棋盘上最多可以放置多少个骑
士,使得它们彼此互不攻击。
«数据输入:
由文件knight.in给出输入数据。第一行有2 个正整数n 和m (1<=n<=200, 0<=m<=n*n)<n2),< span="">
分别表示棋盘的大小和障碍数。接下来的m 行给出障碍的位置。每行2 个正整数,表示障
碍的方格坐标。
«结果输出:
将计算出的共存骑士数输出到文件knight.out。
输入文件示例 输出文件示例
knight.in
3 2
1 1
3 3
knight.out
5
- /*
- 观察题目,我们可以知道,能够互相跳到的两个点颜色(棋盘颜色)一定是不同的,所以进行染色建一个二分图, 接下来再跑最大独立集。
- 最大独立集=V-最大匹配。
- PS:我的dinic又被虐了,以后真的要改dinic的写法了。
- */
- #include<cstdio>
- #include<iostream>
- #define N 40010
- #define M 10000010
- #define inf 1000000000
- using namespace std;
- int a[][],head[N],dis[N],q[N],n,m,cnt=,S,T;
- int dx[]={,,-,-,,,-,-};
- int dy[]={,-,,-,,-,,-};
- struct node{
- int v,pre,f;
- };node e[M];
- int ws(int x,int y){
- return (x-)*n+y;
- }
- void add(int u,int v,int f){
- e[++cnt].v=v;e[cnt].f=f;e[cnt].pre=head[u];head[u]=cnt;
- e[++cnt].v=u;e[cnt].f=;e[cnt].pre=head[v];head[v]=cnt;
- }
- bool bfs(){
- for(int i=;i<=T;i++)dis[i]=inf;
- int h=,t=;q[]=S;dis[S]=;
- while(h<t){
- int now=q[++h];
- for(int i=head[now];i;i=e[i].pre){
- int v=e[i].v;
- if(e[i].f&&dis[v]>dis[now]+){
- dis[v]=dis[now]+;
- if(v==T)return true;
- q[++t]=v;
- }
- }
- }
- return dis[T]!=inf;
- }
- int dinic(int now,int f){
- if(now==T)return f;
- int w,used=;
- for(int i=head[now];i;i=e[i].pre){
- int v=e[i].v;
- if(e[i].f&&dis[v]==dis[now]+){
- w=f-used;
- w=dinic(e[i].v,min(e[i].f,w));
- e[i].f-=w;
- e[i^].f+=w;
- used+=w;
- if(used==f)return f;
- }
- }
- if(!used) dis[now]=-;
- return used;
- }
- int main(){
- freopen("knight.in","r",stdin);
- freopen("knight.out","w",stdout);
- scanf("%d%d",&n,&m);
- S=;T=n*n+;
- for(int i=;i<=m;i++){
- int x,y;scanf("%d%d",&x,&y);
- a[x][y]=;
- }
- for(int i=;i<=n;i++)
- for(int j=;j<=n;j++){
- if(a[i][j])continue;
- if(i+j&) add(ws(i,j),T,);
- else add(S,ws(i,j),);
- }
- for(int i=;i<=n;i++)
- for(int j=;j<=n;j++){
- if(i+j&) continue;
- for(int k=;k<;k++){
- int x=i+dx[k],y=j+dy[k];
- if(x>=&&x<=n&&y>=&&y<=n&&!a[x][y])
- add(ws(i,j),ws(x,y),);
- }
- }
- int ans=n*n-m;
- while(bfs()) ans-=dinic(S,inf);
- printf("%d",ans);
- return ;
- }
[网络流24题] 骑士共存(cogs 746)的更多相关文章
- AC日记——[网络流24题]骑士共存 cogs 746
746. [网络流24题] 骑士共存 ★★☆ 输入文件:knight.in 输出文件:knight.out 简单对比时间限制:1 s 内存限制:128 MB 骑士共存问题 «问题描述: ...
- Cogs 746. [网络流24题] 骑士共存(最大独立集)
[网络流24题] 骑士共存 ★★☆ 输入文件:knight.in 输出文件:knight.out 简单对比 时间限制:1 s 内存限制:128 MB 骑士共存问题 «问题描述: 在一个n*n个方格的国 ...
- COGS746. [网络流24题] 骑士共存
骑士共存问题«问题描述:在一个n*n个方格的国际象棋棋盘上,马(骑士)可以攻击的棋盘方格如图所示.棋盘 上某些方格设置了障碍,骑士不得进入. «编程任务:对于给定的n*n个方格的国际象棋棋盘和障碍标志 ...
- 网络流24题 骑士共存(DCOJ8023)
题目描述 在一个 n*n 个方格的国际象棋棋盘上,马(骑士)可以攻击的棋盘方格如图所示.棋盘上某些方格设置了障碍,骑士不得进入. 对于给定的 n*n 个方格的国际象棋棋盘和障碍标志,计算棋盘上最多可以 ...
- 网络流24题——骑士共存问题 luogu 3355
题目描述:这里 从这里开始,我们涉及到了一个新的问题:最小割问题 首先给出一些定义(本人根据定义自己口胡的): 一个流网络中的一个割是一个边集,使得割掉这些边集后源点与汇点不连通 而最小割问题就是一个 ...
- 【费用流】【网络流24题】【cogs 739】运输问题
739. [网络流24题] 运输问题 ★★ 输入文件:tran.in 输出文件:tran.out 简单对照 时间限制:1 s 内存限制:128 MB «问题描写叙述: «编程任务: 对于给定的m 个仓 ...
- [网络流24题]餐巾(cogs 461)
[问题描述] 一个餐厅在相继的N天里,第i天需要Ri块餐巾(i=l,2,-,N).餐厅可以从三种途径获得餐巾. (1)购买新的餐巾,每块需p分: (2)把用过的餐巾送到快洗部,洗一块需m天,费用需f分 ...
- loj #6226. 「网络流 24 题」骑士共存问题
#6226. 「网络流 24 题」骑士共存问题 题目描述 在一个 n×n\text{n} \times \text{n}n×n 个方格的国际象棋棋盘上,马(骑士)可以攻击的棋盘方格如图所示.棋盘上 ...
- Cogs 14. [网络流24题] 搭配飞行员
这道题其实蛮好想的,因为分为正,副飞行员.所以就把正飞行员当作Boy,副飞行员当作Girl.然后做Hungry即可. #include<bits/stdc++.h> using names ...
随机推荐
- C# 操作Access的Ole对象[转]
原文链接 OLE对象数据类型 (1)OLE 对象用于使用 OLE 协议在其他程序中创建的 OLE 对象,如 Microsoft Word 文档. Microsoft Excel 电子表格.图片.声音或 ...
- iOS 集成银联支付(绕过文档的坑,快速集成)-转
本文是投稿文章,作者:南栀倾寒当初集成支付宝的时候,觉得见了这么丑的代码,加上这么难找的下载地址,在配上几乎为零的文档,寒哥就要吐血了. 下午去集成银联,才知道血吐的早了. 下载地址:https:// ...
- Android开发学习——简单类图
1.类A继承于类B (B 是父类,A是 子类) 2.小汽车.自行车 实现车的接口 3.A中有B这个成员变量,单向关联 4.聚合,整体与部分的关系.has-a B中的构造函数(或set方法)需要 ...
- WPF学习10:基于MVVM Light 制作图形编辑工具(1)
图形编辑器的功能如下图所示: 除了MVVM Light 框架是一个新东西之外,本文所涉及内容之前的WPF学习0-9基本都有相关介绍. 本节中,将搭建编辑器的界面,搭建MVVM Light 框架的使用环 ...
- AJPFX总结关于Java中过滤出字母、数字和中文的正则表达式
1.Java中过滤出字母.数字和中文的正则表达式 (1)过滤出字母的正则表达式 [^(A-Za-z)] (2) 过滤出 数字 的正则表达式 [^(0-9)] (3) 过滤出 中文 的正则 ...
- QScrollArea不能显示滚动条
转载请注明出处:http://www.cnblogs.com/dachen408/p/7147141.html 问题:QScrollArea不能显示滚动条 解决方案:设置QScrollArea-> ...
- Sass的的使用三
[Sass]普通变量与默认变量普通变量定义之后可以在全局范围内使用. 默认变量sass 的默认变量仅需要在值后面加上 !default 即可.sass 的默认变量一般是用来设置默认值,然后根据需求来覆 ...
- 洛谷 P1339 [USACO09OCT]热浪Heat Wave (堆优化dijkstra)
题目描述 The good folks in Texas are having a heatwave this summer. Their Texas Longhorn cows make for g ...
- MySQL for Mac 终端操作说明
mysql for mac 终端操作说明MySQL服务开启Mac版mysql可以从设置里启动服务: 如果想要在终端(Terminal)中操作mysql,需要先添加mysql路径,在此以zsh为例: # ...
- 认识单文件组件.vue 文件
vuejs 自定义了一种.vue文件,可以把html, css, js 写到一个文件中,从而实现了对一个组件的封装, 一个.vue 文件就是一个单独的组件.由于.vue文件是自定义的,浏览器不认识,所 ...