题目描述

一个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’。

输入输出样例

输入样例#1:

6
10
2 2
2 4
2 6
3 1
3 2
3 4
3 6
4 2
4 4
4 6
输出样例#1:

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 逃离的更多相关文章

  1. 洛谷 P3393 逃离僵尸岛

    洛谷 这道题目其实是最短路裸题. 首先看到题目,要求的到"被占点"距离不大于S的点,自然想到了以"被占点"为源点,求一遍最短路,处理出"危险点&quo ...

  2. 洛谷P3393 逃离僵尸岛

    题目描述 小a住的国家被僵尸侵略了!小a打算逃离到该国唯一的国际空港逃出这个国家. 该国有N个城市,城市之间有道路相连.一共有M条双向道路.保证没有自环和重边. K个城市已经被僵尸控制了,如果贸然闯入 ...

  3. 洛谷P3393逃离僵尸岛 最短路

    貌似一直不写题解不太好QAQ 但是找不到题啊... 随便写点水题来补博客吧 题目不pa了,点链接吧... 点我看题 很明显这是道sb题... 思路:  对于每一个僵尸城市预处理其 s 距离内的城市,然 ...

  4. [题解] 洛谷 P3393 逃离僵尸岛

    题目TP门 很明显是一个最短路,但是如何建图才是关键. 对于每一个不可遍历到的点,可以向外扩散,找到危险城市. 若是对于每一个这样的城市进行搜索,时间复杂度就为\(O(n^2)\),显然过不了.不妨把 ...

  5. 洛谷 P1373 小a和uim之大逃离

    2016-05-30 12:31:59 题目链接: P1373 小a和uim之大逃离 题目大意: 一个N*M的带权矩阵,以任意起点开始向右或者向下走,使得奇数步所得权值和与偶数步所得权值和关于K的余数 ...

  6. 洛谷1373 小a和uim之大逃离

    洛谷1373 小a和uim之大逃离 本题地址:http://www.luogu.org/problem/show?pid=1373 题目背景 小a和uim来到雨林中探险.突然一阵北风吹来,一片乌云从北 ...

  7. 【题解】洛谷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 ...

  8. 洛谷 1373 dp 小a和uim之大逃离 良心题解

    洛谷 1373 dp 这题还不算太难,,当初看的时候不是很理解题意,以为他们会选择两条不同的路径,导致整体思路混乱 传送门 其实理解题意和思路之后还是敲了不短的时间,一部分身体原因再加上中午休息不太好 ...

  9. 洛谷1640 bzoj1854游戏 匈牙利就是又短又快

    bzoj炸了,靠离线版题目做了两道(过过样例什么的还是轻松的)但是交不了,正巧洛谷有个"大牛分站",就转回洛谷做题了 水题先行,一道傻逼匈牙利 其实本来的思路是搜索然后发现写出来类 ...

随机推荐

  1. 《精通Spring4.X企业应用开发实战》读后感第四章(BeanFactory生命周期)

    package com.smart; import org.springframework.beans.BeansException; import org.springframework.beans ...

  2. Elasticsearch检索分类详解

    前言 Elasticsearch中当我们设置Mapping(分词器.字段类型)完毕后,就可以按照设定的方式导入数据. 有了数据后,我们就需要对数据进行检索操作.根据实际开发需要,往往我们需要支持包含但 ...

  3. utunbu下的codeblocks配置openGL环境

    真想骂娘阿,刚开始用utunbu,什么也不明白,不明白我装都软件都在哪里,不知道就像windows下的系统文件那样的文件在哪里,也不知道如何配置环境变量.就这样稀里糊涂的,还要抓紧时间装openGL, ...

  4. 超级实用的Chrome插件

    1.JSON-handle:浏览器前台访问后台,后台返回json,它帮你格式化 2.Page Ruler:帮你测量页面上任何位置的长宽高 3. Momentum:打开新的tab页就像打开了一个新的世界 ...

  5. spring-boot-starter-data-redis学习笔记01

    1.Redis在Unbuntu14开启, 进入安装的src目录: 1.修改redis.conf,因为redis默认是受保护模式. protected-mode yes   (改为no) bind 12 ...

  6. std::function"函数"对象包装器

    语义: 类模板std::function是可调用对象的包装器,可以包装除了类成员之外的所有可调用对象.包括,普通函数,函数指针,lambda,仿函数.通过指定的模板参数,它可以用统一的方式保存,并延迟 ...

  7. React 从入门到进阶之路(五)

    之前的文章我们介绍了  React 事件,方法, React定义方法的几种方式 获取数据 改变数据 执行方法传值.接下来我们将介绍 React 表单事件 键盘事件 事件对象以及 React中 的 re ...

  8. GHOST操作

    通过详细的图文说明,怎么用ghost备份系统,以备系统中毒或者感觉不好用时,快速恢复到备份时的状态! 工具/原料 2013最新雨林木风ghostxpxp3系统或者老毛桃等工具 方法/步骤 1 重新启动 ...

  9. MyBatis日志实现

    maven项目resources文件夹下log4j.properties 其作用是输出controller包下参与Mybatis的类的SQL语句输出.如果包名不一样,请根据自己的项目情况调整. # G ...

  10. 微信小程序-工具无法加载本地模拟开发服务的解决办法

    微信小程序开发工具出现如下问题: 因为网络代理软件或者 VPN 影响,工具无法加载本地模拟开发服务  请尝试以下任一解决方案1.关闭相关网络代理软件,重新编译成功后,再启动相关网络代理软件: 2.配置 ...