洛谷 P2691 逃离
题目描述
一个n×n栅格是由n行和n列顶点组成的一个无向图,如图所示。用(i,j)表示处于第i行第j列的顶点。除了边界顶点(即满足i=1,i=n,j=1或j=n的顶点(i,j)),栅格中的所有其他顶点都有四个相邻的顶点。
给定栅格中的m≤n2个起始点(x1,y1),…, (xm,ym),逃脱问题即确定从起始顶点到边界上的任何m个相异的顶点之间,是否存在m条顶点不相交的路径。例如,图中左边的栅格包含了一个逃脱,黑点表示起始点,一个逃脱路径由灰线表示;而右边的栅格则没有逃脱。
现给定一个栅格的n和m,以及其中m个起始点的坐标,你只需要判断是否存在逃脱即可。
输入输出格式
输入格式:
输入文件为escape.in
第一行是一个整数,为n (n≤35)。
第二行还是一个整数,为m。
以下m行,第(i+2)行包含两个整数xi和yi,表示第i行第j列的点是起始点。输入数据保证不会出现起始点坐标相同的情况。
输出格式:
输出文件为escape.out
只包括一行。若存在逃脱输出’YES’,不存在逃脱输出’NO’。
输入输出样例
6
10
2 2
2 4
2 6
3 1
3 2
3 4
3 6
4 2
4 4
4 6
YES
#include <cstdio>
#include <queue>
#define N 5000005
using namespace std;
int dep[N],nextt[N<<],to[N<<],flow[N<<],head[N],cnt=,n,m,fx[]={,-,,},fy[]={,,-,};
inline void ins(int u,int v,int w)
{
nextt[++cnt]=head[u];
to[cnt]=v;
flow[cnt]=w;
head[u]=cnt;
}
bool bfs(int s,int t)
{
for(int i=s;i<=t;++i) dep[i]=-;
dep[s]=;
queue<int>q;
q.push(s);
for(int now;!q.empty();)
{
now=q.front();q.pop() ;
for(int i=head[now];i;i=nextt[i])
{
int v=to[i];
if(dep[v]==-&&flow[i])
{
dep[v]=dep[now]+;
if(v==t) return true;
q.push(v);
}
}
}
return false;
}
inline int min(int a,int b){return a>b?b:a;}
int dfs(int now,int t,int Limit)
{
if(now==t||!Limit) return Limit;
int ret=,f;
for(int i=head[now];i;i=nextt[i])
{
int v=to[i];
if(dep[v]==dep[now]+&&flow[i]&&(f=dfs(v,t,min(Limit,flow[i]))))
{
flow[i]-=f;
flow[i^]+=f;
ret+=f;
Limit-=f;
if(!Limit) break;
}
}
if(ret!=Limit) dep[now]=-;
return ret;
}
int Dinic(int S,int T)
{
int ret=;
for(;bfs(S,T);ret+=dfs(S,T,0x3f3f3f3f));
return ret;
}
int main()
{
scanf("%d%d",&n,&m);
int S=,T=*n*n+;
for(int x,y,i=;i<=m;++i)
{
scanf("%d%d",&x,&y);
ins(S,(x-)*n+y,);
ins((x-)*n+y,S,);
}
for(int i=;i<=n;++i)
for(int j=;j<=n;++j)
for(int k=;k<;++k)
{
int u=i+fx[k],v=j+fy[k];
if(u>&&u<=n&&v>&&v<=n)
{
ins((i-)*n+j,(u-)*n+v,);
ins((u-)*n+v,(i-)*n+j,);
}
}
for(int i=;i<=n;++i) ins(i,T,),ins(T,i,);
for(int i=n*n-n+;i<=n*n;++i) ins(i,T,),ins(T,i,);
for(int i=n+;i<=n*n-n;i+=n) ins(i,T,),ins(T,i,);
for(int i=;i<=n;++i) ins(i*n,T,),ins(T,i*n,);
int ans=Dinic(S,T);
if(ans==m) printf("YES");
else printf("NO");
return ;
}
洛谷 P2691 逃离的更多相关文章
- 洛谷 P3393 逃离僵尸岛
洛谷 这道题目其实是最短路裸题. 首先看到题目,要求的到"被占点"距离不大于S的点,自然想到了以"被占点"为源点,求一遍最短路,处理出"危险点&quo ...
- 洛谷P3393 逃离僵尸岛
题目描述 小a住的国家被僵尸侵略了!小a打算逃离到该国唯一的国际空港逃出这个国家. 该国有N个城市,城市之间有道路相连.一共有M条双向道路.保证没有自环和重边. K个城市已经被僵尸控制了,如果贸然闯入 ...
- 洛谷P3393逃离僵尸岛 最短路
貌似一直不写题解不太好QAQ 但是找不到题啊... 随便写点水题来补博客吧 题目不pa了,点链接吧... 点我看题 很明显这是道sb题... 思路: 对于每一个僵尸城市预处理其 s 距离内的城市,然 ...
- [题解] 洛谷 P3393 逃离僵尸岛
题目TP门 很明显是一个最短路,但是如何建图才是关键. 对于每一个不可遍历到的点,可以向外扩散,找到危险城市. 若是对于每一个这样的城市进行搜索,时间复杂度就为\(O(n^2)\),显然过不了.不妨把 ...
- 洛谷 P1373 小a和uim之大逃离
2016-05-30 12:31:59 题目链接: P1373 小a和uim之大逃离 题目大意: 一个N*M的带权矩阵,以任意起点开始向右或者向下走,使得奇数步所得权值和与偶数步所得权值和关于K的余数 ...
- 洛谷1373 小a和uim之大逃离
洛谷1373 小a和uim之大逃离 本题地址:http://www.luogu.org/problem/show?pid=1373 题目背景 小a和uim来到雨林中探险.突然一阵北风吹来,一片乌云从北 ...
- 【题解】洛谷P1373 小a和uim之大逃离(坐标DP)
次元传送门:洛谷P1373 思路 设f[i][j][t][1/0]表示走到(i,j)时 小a减去uim的差值为t 当前是小a取(0) uim取(1) 那么转移就很明显了 f[i][j][t][]=(f ...
- 洛谷 1373 dp 小a和uim之大逃离 良心题解
洛谷 1373 dp 这题还不算太难,,当初看的时候不是很理解题意,以为他们会选择两条不同的路径,导致整体思路混乱 传送门 其实理解题意和思路之后还是敲了不短的时间,一部分身体原因再加上中午休息不太好 ...
- 洛谷1640 bzoj1854游戏 匈牙利就是又短又快
bzoj炸了,靠离线版题目做了两道(过过样例什么的还是轻松的)但是交不了,正巧洛谷有个"大牛分站",就转回洛谷做题了 水题先行,一道傻逼匈牙利 其实本来的思路是搜索然后发现写出来类 ...
随机推荐
- 深入剖析ASP.NET Core2.1部署模型,你会大吃一惊
---------------------------- 以下内容针对 ASP.NET Core2.1版本,2.2推出windows IIS进程内寄宿 暂不展开讨论---------------- ...
- List Control控件中及时捕获checkbox被选中的消息的解决方案
转自:http://blog.csdn.net/vycode/article/details/7345073 我的功能需求是:用户可以在List Control里添加item,当无选项被选中(即Che ...
- aimOffset注意事项
AimOffset的记录 AimOffset是什么,就是动画(相对于某个具体姿势比如待机动作的)叠加. AimOffset有什么用,简单说就是叠加动作,比如无双中骑马挥刀动作叠加. 注意步骤 1所有分 ...
- 解决Idea项目启动报错:程序包javax.servlet.http不存在
报错信息 在没有使用maven的时候,web项目从远程仓库获取下以后,起一次启动往往会报错javax.servlet.http程序包找不到,随之而来的java基础包都将不能使用,报错信息如下: 解决方 ...
- Spring配置文件xsi:schemaLocation无法解析导致启动失败的解决方案
今天遇到过情况,spring的配置文件在本地读取没有问题,扔到线上服务器运行就报无法解析xml,找了很久问题,发现是因为线上服务器无法上网,导致无法下载相关的xsd文件,没办法不能上网就只有使用本地的 ...
- APP携参安装技术怎样帮助APP推广
APP 如何自动实现携带参数安装?这是许多开发者感兴趣的问题,毕竟在 APP 开发的许多逻辑上常常不可避免的需要判断安装来源,比如:广告投放.用户邀请.用户行为.社交分享等 APP 推广环节,国内的 ...
- java基础第十篇之异常
1.1接口概念 类:具有相同属性和功能的事物集合 接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的”类”. 接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于 ...
- 调试接口,返回的json数据,我定义了一个类,用来序列化,其中有一个字段定义为string 然后序列化的时候报错
调试接口,返回的json数据,我定义了一个类,用来序列化,其中有一个字段定义为string 然后序列化的时候报错 在需要解析的类型类上加上声明 eg:
- shell脚本编程入门
Linux的Shell种类众多,这里我们关注的重点是Bash. 基本语法 环境变量$PATH IO重定向: 以<改变标准输入 如:tr -d '\r' < dos-file.txt 以& ...
- Centos 自动更新git
首先,要先配置好自己的Git,然后在某一处进行脚本的编写. 比如项目目录为:/home/project,那参考如下来进行 vim /home/project/automatic_git.sh #/bi ...