我们可以得到一个结论:没有两个机器人走过的路会重叠

所以题目就转变为了能不能让机器人的路径不重叠且每个机器人能到达终点

直接一个点朝他四连通方向的四个点连容量为1的边即可

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef int JQK;
int n, m;
char ch[][];
const int dir[][] = {{, }, {, }, {, -}, { -, }};
namespace dinic {
const int MAXN = ;
const int MAXM = ;
const int INF = ;
int Head[MAXN], cur[MAXN], lev[MAXN], to[MAXM << ], nxt[MAXM << ], ed = ;
int S, T, MAXP;
JQK f[MAXM << ];
inline void addedge(int u, int v, JQK cap) {
to[++ed] = v;
nxt[ed] = Head[u];
Head[u] = ed;
f[ed] = cap;
to[++ed] = u;
nxt[ed] = Head[v];
Head[v] = ed;
f[ed] = ;
return;
}
inline bool BFS() {
int u;
for (int i = ; i <= MAXP + ; i++) {
lev[i] = -;
}
//memset(lev, -1, sizeof(lev));
queue<int>q;
lev[S] = ;
q.push(S);
while (q.size()) {
u = q.front();
q.pop();
for (int i = Head[u]; i; i = nxt[i])
if (f[i] && lev[to[i]] == -) {
lev[to[i]] = lev[u] + ;
q.push(to[i]);
/*
if (to[i] == T)
{
return 1;
}
magic one way optimize
*/
}
}
for (int i = ; i <= MAXP + ; i++) {
cur[i] = Head[i];
}
//memcpy(cur, Head, sizeof Head);
return lev[T] != -;
}
JQK DFS(int u, JQK maxf) {
if (u == T || !maxf) {
return maxf;
}
JQK cnt = , tem;
for (int &i = cur[u]; i; i = nxt[i])
if (f[i] && lev[to[i]] == lev[u] + ) {
tem = DFS(to[i], min(maxf, f[i]));
maxf -= tem;
f[i] -= tem;
f[i ^ ] += tem;
cnt += tem;
if (!maxf) {
break;
}
}
if (!cnt) {
lev[u] = -;
}
return cnt;
}
JQK Dinic() {
JQK ans = ;
while (BFS()) {
ans += DFS(S, INF);
}
return ans;
}
void init(int SS, int TT) {
for (int i = ; i <= MAXP + ; i++) {
Head[i] = ;
}
ed = ;
S = SS;
T = TT;
return;
}
void work(int aim) {
int u, v, c;
for (int i = ; i <= n; i++) {
for (int j = ; j <= m; j++) {
if (ch[i][j] == '') {
continue;
}
for (int k = ; k < ; k++) {
int dx = i + dir[k][];
int dy = j + dir[k][];
if (dx >= && dx <= n && dy >= && dy <= m) {
if (ch[dx][dy] == '') {
continue;
}
addedge((i - )*m + j, (dx - )*m + dy, );
}
}
}
}
int ans = Dinic();
printf(ans == aim ? "Yes\n" : "No\n");
}
}
int main() {
int TNT, a, b, x, s, t;
scanf("%d", &TNT);
while (TNT--) {
scanf("%d %d", &n, &m);
scanf("%d %d", &a, &b);
dinic::MAXP = n * m + ;
s = n * m + ;
t = s + ;
dinic::init(s, t);
for (int i = ; i <= n; i++) {
scanf("%s", ch[i] + );
}
for (int i = ; i <= a; i++) {
scanf("%d", &x);
dinic::addedge(s, x, );
}
for (int i = ; i <= b; i++) {
scanf("%d", &x);
dinic::addedge(x + (n - )*m, t, );
}
if (a > b) {
printf("No\n");
continue;
}
dinic::work(a);
}
return ;
}

HDU 6735 结论网络流 机器人不重叠路径的更多相关文章

  1. Cogs 728. [网络流24题] 最小路径覆盖问题

    [网络流24题] 最小路径覆盖问题 ★★☆ 输入文件:path3.in 输出文件:path3.out 评测插件 时间限制:1 s 内存限制:128 MB 算法实现题8-3 最小路径覆盖问题(习题8-1 ...

  2. cogs 728. [网络流24题] 最小路径覆盖问题 匈牙利算法

    728. [网络流24题] 最小路径覆盖问题 ★★★☆   输入文件:path3.in   输出文件:path3.out   评测插件时间限制:1 s   内存限制:128 MB 算法实现题8-3 最 ...

  3. hdu 2883 kebab 网络流

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2883 Almost everyone likes kebabs nowadays (Here a ke ...

  4. HDU 3861 The King’s Problem 最小路径覆盖(强连通分量缩点+二分图最大匹配)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3861 最小路径覆盖的一篇博客:https://blog.csdn.net/qq_39627843/ar ...

  5. HDU - 1160 FatMouse's Speed 动态规划LIS,路径还原与nlogn优化

    HDU - 1160 给一些老鼠的体重和速度 要求对老鼠进行重排列,并找出一个最长的子序列,体重严格递增,速度严格递减 并输出一种方案 原题等于定义一个偏序关系 $(a,b)<(c.d)$ 当且 ...

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

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

  7. HDU 1503 Advanced Fruits(LCS+记录路径)

    http://acm.hdu.edu.cn/showproblem.php?pid=1503 题意: 给出两个串,现在要确定一个尽量短的串,使得该串的子串包含了题目所给的两个串. 思路: 这道题目就是 ...

  8. hdu 1664(数论+同余搜索+记录路径)

    Different Digits Time Limit: 10000/4000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  9. P2764 [网络流24题]最小路径覆盖问题[最大流]

    地址 这题有个转化,求最少的链覆盖→即求最少联通块. 设联通块个数$x$个,选的边数$y$,点数$n$个 那么有 $y=n-x$   即  $x=n-y$ 而n是不变的,目标就是在保证每个点入度.出度 ...

随机推荐

  1. 15.Git四种协议-本地协议(local)、HTTP协议、SSH协议、Git协议

    1.本地协议(loacl) 最基本的协议,其远程仓库其实就是硬盘内部的一个目录(例如D:\\project).常见于团队内的人对一个共享的文件系统(例如NFS)具有访问权限,或者多人共用一台电脑的情况 ...

  2. Egret入门学习日记 --- 第十七篇(书中 7.4~8.2节 内容)

    第十七篇(书中 7.4~8.2节 内容) 昨天看到 7.3 节,那么今天. 开始 7.4节.     好吧,这些其他的服务器运行知识,就不搞了... 至此,7.4节 内容结束. 开始 7.5节 内容. ...

  3. 最新 思贝克java校招面经 (含整理过的面试题大全)

    从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.思贝克等10家互联网公司的校招Offer,因为某些自身原因最终选择了思贝克.6.7月主要是做系统复习.项目复盘.LeetCo ...

  4. idea用maven创建web项目(详细)

    引用:http://blog.csdn.net/u010361662/article/details/50605099 欢迎添加微信

  5. error PRJ0003 : 生成“rc.exe”时出错

    完美解决 visual studio 2008运行时 error PRJ0003 : 生成“rc.exe”时出错 步骤如下 : 1.运行vs2008安装程序,点击安装或删除程序.在“选择要安装的功能” ...

  6. element form 校验数组每一项

    1.校验的数据结构如下: 2.html结构 <el-dialog :title="title" :visible.sync="visable" width ...

  7. [转帖]MMU内存管理单元

    MMU内存管理单元 https://www.cnblogs.com/alantu2018/p/9002309.html 之前对这一块一直不理解 最近学习了点 CPU time slice 以及 con ...

  8. 剑指offer15:反转链表后,输出新链表的表头。

    1 题目描述 输入一个链表,反转链表后,输出新链表的表头. 2 思路和方法 (1)利用栈作为中间存储,进行链表的反转,将压入的数据按先进后出的顺序弹出依次赋给链表再输出表头pHead. (2)将当前节 ...

  9. [MA] 有关 Likelihood

    当提到 Linear Regression 或是 Logistic regression 等关键词时,都会涉及一个概念,叫做 Likelihood Function 以及 Maximum Likeli ...

  10. 『Python Web框架之Django』第几节: AJAX

    一. AJAX简介 AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步的Javascript和XML”.即使用Javascript语言与服务器进行异步交互, ...