agc026F Lotus Leaves
题目链接
题目大意
一个n*m的网格上有一些点,一个点可以跳到与其同一行或同一列的点上。给定起点和终点。
求要使起点不能跳到终点,最少撤走几个点。
\(n,m\leq 100\)
解题思路
考虑将能够互相到达的点之间连边,题目要求即使删去尽可能少的点使图不连通。
十分套路地把一个点拆成一个入点和出点,之间连一条流量为1的边,删去这个点即使割去这条边。
然后就是网络流板子了。
代码
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<queue>
#include<cstring>
#define N 40010
#define M N*100
#define N1 110
#define ll long long
#define inf 1000000000
using namespace std;
struct node{
int nxt,to;
ll f;
}road[M];
int head[N],cur[N],cnt=1;
void add(int u,int v,ll f)
{
road[++cnt]=(node){head[u],v,f};
head[u]=cnt;
road[++cnt]=(node){head[v],u,0};
head[v]=cnt;
}
queue<int>q;
int dep[N];
bool bfs(int s,int t)
{
memcpy(cur,head,sizeof(cur));
memset(dep,127,sizeof(dep));
dep[s]=0;
q.push(s);
while(!q.empty())
{
int u=q.front();
q.pop();
for(int i=head[u];i;i=road[i].nxt)
if(road[i].f>0)
{
int v=road[i].to;
if(dep[v]>=inf)
{
dep[v]=dep[u]+1;
q.push(v);
}
}
}
return dep[t]<=inf;
}
ll dfs(int u,int t,ll flow)
{
if(u==t || !flow) return flow;
ll ans=0;
for(int i=cur[u];i;i=road[i].nxt)
{
cur[u]=i;
int v=road[i].to,f=0;
if(dep[v]==dep[u]+1 && (f=dfs(v,t,min(flow,road[i].f))))
{
flow-=f;
ans+=f;
road[i].f-=f;
road[i^1].f+=f;
if(!flow) break;
}
}
return ans;
}
ll dinic(int s,int t)
{
ll ans=0;
while(bfs(s,t)) ans+=dfs(s,t,inf);
return ans;
}
int n,m;
int id(int x,int y){return (x-1)*m+y;}
int ids(int x,int o){return x*2+o;}
void add_e(int x,int y)
{
add(ids(x,1),ids(y,0),inf);
add(ids(y,1),ids(x,0),inf);
}
char str[N1][N1];
int main()
{
scanf("%d%d",&n,&m);
int s=(n*m)*2+2,t=s+1;
for(int i=1;i<=n;i++) scanf("%s",str[i]+1);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
if(str[i][j]!='.')
{
for(int k=i+1;k<=n;k++)
if(str[k][j]!='.')
add_e(id(i,j),id(k,j));
for(int k=j+1;k<=m;k++)
if(str[i][k]!='.')
add_e(id(i,j),id(i,k));
if(str[i][j]=='S')
add(s,ids(id(i,j),0),inf),add(ids(id(i,j),0),ids(id(i,j),1),inf);
else if(str[i][j]=='T')
add(ids(id(i,j),1),t,inf),add(ids(id(i,j),0),ids(id(i,j),1),inf);
else add(ids(id(i,j),0),ids(id(i,j),1),1);
}
ll ans=dinic(s,t);
printf("%lld\n",ans>=inf?-1:ans);
return 0;
}
agc026F Lotus Leaves的更多相关文章
- AtCoder - 2568 Lotus Leaves
Problem Statement There is a pond with a rectangular shape. The pond is divided into a grid with H r ...
- 【ARC074F】Lotus Leaves 最小割
Description 给你一个n*m网格图,有起点荷叶和终点荷叶,有中转荷叶,其他的格子没东西,一个荷叶可以跳到同一行或者列的另一个荷叶.问最多删掉几个中转荷叶能让起点终点不连通.如果不行输出-1. ...
- AtCoder Regular Contest 074F - Lotus Leaves
$n \leq 300,m \leq 300$,$n*m$的格子里有起点有终点有空地有障碍,人会从起点选一个同行或同列空地跳过去,然后一直这样跳到终点.求至少删掉多少格子使得人跳不到终点. 首先S和T ...
- AtCoder Regular Contest 074 F - Lotus Leaves
题目传送门:https://arc074.contest.atcoder.jp/tasks/arc074_d 题目大意: 给定一个\(H×W\)的网格图,o是可以踩踏的点,.是不可踩踏的点. 现有一人 ...
- 【arc077f】AtCoder Regular Contest 074 F - Lotus Leaves
题意 给定一个n*m的池塘,每个格子上可能有叶子. 从一个叶子出发,可以跳到相同行或相同列的叶子. 问至少去掉多少叶子,使得起点不能到达终点. \(n,m<=100\) 解法 很显然的最小割模型 ...
- 【AtCoder】ARC074
ARC 074 C - Chocolate Bar 直接枚举第一刀横切竖切,然后另一块要求如果横切分成\(H / 2\)竖切分成\(W/2\)即可 #include <bits/stdc++.h ...
- Atcoder Regular-074 Writeup
C - Chocolate Bar 题面 There is a bar of chocolate with a height of H blocks and a width of W blocks. ...
- 2017年上海金马五校程序设计竞赛:Problem I : Frog's Jumping (找规律)
Description There are n lotus leaves floating like a ring on the lake, which are numbered 0, 1, ..., ...
- AtCoder刷题记录
构造题都是神仙题 /kk ARC066C Addition and Subtraction Hard 首先要发现两个性质: 加号右边不会有括号:显然,有括号也可以被删去,答案不变. \(op_i\)和 ...
随机推荐
- php基础系列之 数据的存储和读取
·文件处理 ·写入一个文件 1,打开这个文件.如果这个文件不存在,需要先创建它 2,将数据写入这个文件 3,关闭这个文件 ·从一个文件读出数据 1,打开这个文件.如果这个文件不能打开(例如,文件不存在 ...
- 第k个数(排序)
给定一个长度为n的整数数列,以及一个整数k,请用快速选择算法求出数列的第k小的数是多少. 输入格式 第一行包含两个整数 n 和 k. 第二行包含 n 个整数(所有整数均在1~109109范围内),表示 ...
- jdk之java.lang.Integer源码理解
基本数据类型的包装类java.lang.Integer是我们频繁使用的一个系统类,那么通过一个示例反应出的几个问题来深入理解一下此类的源码. 需求:实现Integer类型的两个数值交换. packag ...
- js控制日期的前或后N天,前或后一个月
/*获取指定日期前或者后指定间隔时间* sdate:指定日期* interval:时间间隔* caret:间隔符*/function getNowFormatDate(sdate,interval,c ...
- AcWing 791. 高精度加法
https://www.acwing.com/problem/content/793/ #include<bits/stdc++.h> using namespace std; vecto ...
- 2.8 (显示、隐式、线程休眠) selenium 等待方式 ❀
http://blog.csdn.net/pf20050904/article/details/20052485 http://www.cnblogs.com/hellokitty1/p/629584 ...
- Intellij-Idea使用小细节
SpringMVC项目部署到tomcat中文乱码,tomcat的配置里面加上 -Dfile.encoding=UTF-8
- 素问 - IC跨期套利
摘自<小韭的学习圈> Q 我现在是长持ic.我观察到IC1907和IC1909的贴水差会有波动.有时候,IC 1907涨的多,有时候IC1909涨的多.而在某一天这个趋势相对是稳定的. 那 ...
- robots.txt 让搜索引擎不再收录网站
有没有担心过自己的隐私会在强大的搜索引擎面前无所遁形?想象一下,如果要向世界上所有的人公开你的私人日记,你能接受吗?的确是很矛盾的问题,站长们大都忧虑“如何让搜索引擎收录的我的网站?”,而我们还是要研 ...
- 剑指Offer:面试题20:表示数值的字符串
记录一下书上的写法.很整洁,每个函数的功能都显而易见.自己开始写的一堆if else语句像是一坨屎.另外注释的地方短路效应也要注意一下.总之这题还挺考察代码素质的(我这种就不存在什么素质..乱糟糟一团 ...