洛谷 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炸了,靠离线版题目做了两道(过过样例什么的还是轻松的)但是交不了,正巧洛谷有个"大牛分站",就转回洛谷做题了 水题先行,一道傻逼匈牙利 其实本来的思路是搜索然后发现写出来类 ...
随机推荐
- Mysql定时执行任务实现方法
http://blog.csdn.net/zlp5201/article/details/38309095
- JavaWeb_tomcat设置默认应用
在tomcat的server.xml文件中设置默认应用. 在tomcat文件目录里面的conf/server.xml文件中,在<Engine>...</Engine>中再增加一 ...
- SO_REUSEADDR的分析
今天协议个socket程序时碰到了这个问题,选自博客http://www.cppblog.com/ace/archive/2006/04/29/6446.html 敲完代码,等下看它.
- 聊聊心跳机制及netty心跳实现
我们在使用netty的时候会使用一个参数,ChannelOption.SO_KEEPALIVE为true, 设置好了之后再Linux系统才会对keepalive生效,但是linux里边需要配置几个参数 ...
- 杭电1003_Max Sum
这是原题的链接http://acm.hdu.edu.cn/showproblem.php?pid=1003 起初我是利用暴力的方法,求出所有序列的和的情况,每取一个序列就和以知道的最大和作对比,取大者 ...
- solidity 学习笔记(5)接口
接口:不用实现方法,仅仅定义方法. pragma solidity ^; contract cat{ //cat实际上实现了接口animalEat,因为他们有相同的方法. string name; f ...
- 洛谷P3431 [POI2005]AUT-The Bus
P3431 [POI2005]AUT-The Bus 题目描述 The streets of Byte City form a regular, chessboardlike network - th ...
- 微信小程序-工具无法加载本地模拟开发服务的解决办法
微信小程序开发工具出现如下问题: 因为网络代理软件或者 VPN 影响,工具无法加载本地模拟开发服务 请尝试以下任一解决方案1.关闭相关网络代理软件,重新编译成功后,再启动相关网络代理软件: 2.配置 ...
- jsonpath 求和
{ "price": [ 1.0, 2.0 ] } $..price.sum() 以下表达式
- .NET 基础 一步步 一幕幕[Winform应用程序]
时隔半载,重回博客园,一切从头再来,今天只是开始,原谅我这一生放荡不羁爱自由. 进入今天得主题曲:Winform应用程序(简介) 1. winform应用程序是一种智能客户端技术,我们可以使 ...