题目链接:https://www.luogu.org/problemnew/show/P2172

分析:

不要被【国家集训队】的标签吓到,其实这题不是很难。

本题可以对比P4304 [TJOI2013]攻击装置:互不攻击的网络流问题来想。

这道题唯一添加的条件就是只能从上往下征战,于是我们就从8个方向缩减到了四个放向,哪四个呢?

aa[1]=r;bb[1]=-c;
aa[2]=r;bb[2]=c;
aa[3]=c;bb[3]=-r;
aa[4]=c;bb[4]=r;

变量名较丑

然后还是要循环每一个点来把它能攻击到的点扔进vector里。

还有这题的数据范围其实也挺小,适合练习二分图初级。

然后就是这种题目也是不用else break;了!

因为不存在单调性

代码:

#include<cstdio>
#include<iostream>
#include<vector>
using namespace std;
int aa[5];
int bb[5];
struct ben
{
int first,second;
};
vector<ben>v[55][55];
int vis[55][55];
ben link[55][55];
int t;
int a[55][55];
bool find(ben tmp)
{
int x=tmp.first;
int y=tmp.second;
for(int i=0;i<v[x][y].size();i++)
{
int p=v[x][y][i].first;
int q=v[x][y][i].second;
if(vis[p][q]!=t)
{
vis[p][q]=t;
int ls=link[p][q].first;
int ls2=link[p][q].second;
if((ls==0&&ls2==0)||find(link[p][q]))
{
link[p][q].first=x;
link[p][q].second=y;
return 1;
}
}
}
return 0;
}
int main()
{
int n,m,r,c;
int ans=0;
scanf("%d%d%d%d",&m,&n,&r,&c);
for(int i=1;i<=m;i++)
{
for(int j=1;j<=n;j++)
{
char s;
cin>>s;
if(s=='.')
{
a[i][j]=0;
ans++;
}
else
a[i][j]=1;
}
}
aa[1]=r;bb[1]=-c;
aa[2]=r;bb[2]=c;
aa[3]=c;bb[3]=-r;
aa[4]=c;bb[4]=r;
for(int i=1;i<=m;i++)
{
for(int j=1;j<=n;j++)
{
for(int k=1;k<=4;k++)
{
int x=i+aa[k];
int y=j+bb[k];
if(x>0&&x<=m&&y>0&&y<=n&&a[x][y]==0)
{
ben tmp;
tmp.first=x;
tmp.second=y;
v[i][j].push_back(tmp);
}
}
} }
int cnt=0;
for(int i=1;i<=m;i++)
{
for(int j=1;j<=n;j++)
{
if(a[i][j]==1)
continue;
t++;
ben tmp;
tmp.first=i;
tmp.second=j;
if(find(tmp))
{
cnt++;
}
//else
//break;
}
}
printf("%d\n",t-cnt);
return 0;
}

洛谷P2172 [国家集训队]部落战争 题解的更多相关文章

  1. P2172 [国家集训队]部落战争(最小路径覆盖)

    P2172 [国家集训队]部落战争 每个点仅走一次:最小路径覆盖 套路地拆点,具体看代码中的$draw()$ 流量每增加1,意味着一支军队可以多走一格,代价减少1 最后答案即为总点数$-dinic() ...

  2. P2172 [国家集训队]部落战争 二分图最小不相交路径覆盖

    二分图最小不相交路径覆盖 #include<bits/stdc++.h> using namespace std; ; ; ; ], nxt[MAXM << ], f[MAXM ...

  3. 【洛谷】4304:[TJOI2013]攻击装置【最大点独立集】【二分图】2172: [国家集训队]部落战争【二分图/网络流】【最小路径覆盖】

    P4304 [TJOI2013]攻击装置 题目描述 给定一个01矩阵,其中你可以在0的位置放置攻击装置. 每一个攻击装置(x,y)都可以按照“日”字攻击其周围的8个位置(x-1,y-2),(x-2,y ...

  4. 模板—点分治A(容斥)(洛谷P2634 [国家集训队]聪聪可可)

    洛谷P2634 [国家集训队]聪聪可可 静态点分治 一开始还以为要把分治树建出来……• 树的结构不发生改变,点权边权都不变,那么我们利用刚刚的思路,有两种具体的分治方法.• A:朴素做法,直接找重心, ...

  5. 国家集训队 部落战争 网络流最小路径覆盖 洛谷P2172

    洛谷AC传送门! step1: 题目大意 有一张M x N的网格图,有一些点为“ * ”可以走,有一些点为“ x ”不能走,每走一步你都可以移动R * C 个格子(参考象棋中马的走法),且不能回头,已 ...

  6. [洛谷P1527] [国家集训队]矩阵乘法

    洛谷题目链接:[国家集训队]矩阵乘法 题目背景 原 <补丁VS错误>请前往P2761 题目描述 给你一个N*N的矩阵,不用算矩阵乘法,但是每次询问一个子矩形的第K小数. 输入输出格式 输入 ...

  7. [洛谷P2839][国家集训队]middle

    题目大意:给你一个长度为$n$的序列$s$.$Q$个询问,问在$s$中的左端点在$[a,b]$之间,右端点在$[c,d]$之间的子段中,最大的中位数. 强制在线. 题解:区间中位数?二分答案,如果询问 ...

  8. 洛谷P2371 [国家集训队]墨墨的等式

    P2371 [国家集训队]墨墨的等式 题目描述 墨墨突然对等式很感兴趣,他正在研究a1x1+a2y2+-+anxn=Ba_1x_1+a_2y_2+-+a_nx_n=Ba1​x1​+a2​y2​+-+a ...

  9. 洛谷P1501 [国家集训队]Tree II(LCT,Splay)

    洛谷题目传送门 关于LCT的其它问题可以参考一下我的LCT总结 一道LCT很好的练习放懒标记技巧的题目. 一开始看到又做加法又做乘法的时候我是有点mengbi的. 然后我想起了模板线段树2...... ...

随机推荐

  1. 使用Boost的DLL库管理动态链接库(类似于Qt中的QLibrary)

    Boost 1.61新增了一个DLL库,跟Qt中的QLibrary类似,提供了跨平台的动态库链接库加载.调用等功能.http://www.boost.org/users/history/version ...

  2. 中国自主X86处理器工艺跃进:国产28nm升级16nm(上海兆芯)

    提到X86处理器,世人皆知Intel.AMD,殊不知还有个VIA(威盛),在Intel反垄断世纪大战中VIA公司作为Intel霸权的受害者也最终确认了X86授权,不过VIA与前面两家的实力相差太远,X ...

  3. delphi资源文件制作及使用详解

    一.引子:现在的Windows应用程序几乎都使用图标.图片.光标.声音等,我们称它们为资源(Resource).最简单的使用资源的办法是把这些资源的源文件打入软件包,以方便程序需要的时候调用.资源是程 ...

  4. 使用Netty实现通用二进制协议的高效数据传输

    Netty是一个高性能的NIO通信框架,提供异步的.事件驱动的网络编程模型.使用Netty可以方便用户开发各种常用协议的网络程序.例如:TCP.UDP.HTTP等等. Netty的最新版本是3.2.7 ...

  5. WPF与WinForm的抉择

    微软曾经对WPF(代号Avalon)抱很大的期望——新一代的华丽用户界面平台,一统Web应用和桌面应用,Flash杀手,尽管微软口头上不承认.几年下来,WPF确实实现了当初的预期的大部分功能,但离称霸 ...

  6. Dependency Injection 筆記 (2)

    续上集,接着要说明如何运用 DI 来让刚才的范例程序具备执行时期切换实现类型的能力. (本文摘自電子書<.NET 依賴注入>) 入门范例—DI 版本 为了让 AuthenticationS ...

  7. 使用sikuli软件进行自动化编程

    因为工作上的需要,某个信息系统不健全,因此仅仅需要一个一个的点击确认,客户端是网页版本的,抓包太复杂了,如何快速的能够自动化操作? 想到了之前学习python的时候,发现了一个基于java的图片编程软 ...

  8. Delphi各种从文件里读取内容的方法

    Hi I am having a problem running a function to read a text file the problem seems to be that my anti ...

  9. QTableView中加入Check列实现,无需Delegate(使用::data(),Qt原生支持)

    通过Delegate创建QCheckBox来实现的Check列,只有在该列进入编辑模式时才能够Check/Uncheck.这显然不是我们想要的,网上翻来翻去,在一个国外论坛中看到了无需Delegate ...

  10. flask相关使用

    一.手动创建一个干净的含有蓝图的flask项目目录 在init.py中 from flask  import Flask​my_app=Flask(__name__)​def create_app() ...