拆点+建图+源点汇点,再用最大流ISAP跑一边就可以

建图还是麻烦一些,然后输出要注意一下格式,因为这个WA两次

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<cctype>
using namespace std;
typedef long long ll;
const int N=800+10;
const int M=1e5+10;
const int INF=0x7f7f7f7f;
struct Edge
{int to,nxt,cap,flow;
}edge[M];
int tot,first[N];
void addedge(int u,int v,int w,int rw=0)
{edge[tot].to=v;edge[tot].cap=w;edge[tot].flow=0;edge[tot].nxt=first[u];first[u]=tot++;edge[tot].to=u;edge[tot].cap=rw;edge[tot].flow=0;edge[tot].nxt=first[v];first[v]=tot++;
}
void init()
{tot=0;memset(first,-1,sizeof(first));
}int gap[N],dep[N],cur[N];
int Q[N],S[N];
void bfs(int s)
{memset(dep,-1,sizeof(dep));memset(gap,0,sizeof(gap));int q0=0,q1=0;Q[q1++]=s;dep[s]=0;gap[0]=1;while(q0<q1){int u=Q[q0++];for(int i=first[u];i!=-1;i=edge[i].nxt){int v=edge[i].to;if(dep[v]!=-1) continue;dep[v]=dep[u]+1;gap[dep[v]]++;Q[q1++]=v;}}
}
int sap(int s,int t,int n)
{int ans=0;bfs(t);memcpy(cur,first,sizeof(first));int u=s;int top=0;while(dep[s]<n){if(u==t){int Min=INF;int inser;for(int i=0;i<top;i++)if(Min>edge[S[i]].cap-edge[S[i]].flow){Min=edge[S[i]].cap-edge[S[i]].flow;inser=i;}for(int i=0;i<top;i++){edge[S[i]].flow+=Min;edge[S[i]^1].flow-=Min;}ans+=Min;top=inser;u=edge[S[top]^1].to;}bool flag=false;int v;for(int i=cur[u];i!=-1;i=edge[i].nxt){v=edge[i].to;if(edge[i].cap-edge[i].flow&&dep[v]+1==dep[u]){flag=true;cur[u]=S[top++]=i;break;}}if(flag){u=v;continue;}gap[dep[u]]--;if(!gap[dep[u]]) return ans;int Min=n;for(int i=first[u];i!=-1;i=edge[i].nxt)if(edge[i].cap-edge[i].flow&&Min>dep[edge[i].to]){Min=dep[edge[i].to];cur[u]=i;}dep[u]=Min+1;gap[dep[u]]++;if(u!=s) u=edge[S[--top]^1].to;}return ans;
}
char c[N][N];
int main()
{int T,kase=0;int n,m,d;scanf("%d",&T);while(T--){init();int ans=0;scanf("%d%d",&n,&d);for(int i=0;i<n;i++)scanf("%s",c[i]);m=strlen(c[0]);for(int i=0;i<n;i++)for(int j=0;j<m;j++)addedge(m*i+j,i*m+j+n*m,c[i][j]-'0');for(int i=0;i<n;i++)scanf("%s",c[i]);for(int i=0;i<n;i++)for(int j=0;j<m;j++)if(c[i][j]=='L')addedge(2*n*m,i*m+j,1),ans++;for(int i=0;i<n;i++)for(int j=0;j<m;j++){if(i+1<=d||n-i<=d||j+1<=d||m-j<=d)addedge(i*m+j+n*m,2*n*m+1,INF);for(int p=0;p<n;p++)for(int q=0;q<m;q++){if(i==p&&j==q) continue;if(abs(p-i)+abs(q-j)<=d)addedge(i*m+j+n*m,p*m+q,INF);}}ans-=sap(2*n*m,2*n*m+1,2*n*m+2);printf("Case #%d: ",++kase);if(ans) printf("%d",ans);else printf("no");if(ans<2) printf(" lizard was left behind.\n");else printf(" lizards were left behind.\n");}return 0;
}

HDU-2732 Leapin' Lizards相关推荐

  1. hdu 2732 Leapin' Lizards (经典网络流)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2732 Your platoon of wandering lizards has entered a ...

  2. HDU - 2732 Leapin' Lizards(最大流+思维建边)

    题目链接:点击查看 题目大意:给出两个n*m的迷宫,第一个迷宫中表示每个柱子的耐久度,第二个迷宫表示的是每一只蜥蜴的位置,现在给出每只蜥蜴可以跳跃的最大曼哈顿距离,规定跳出迷宫边界就可以逃离迷宫,现在 ...

  3. HDU 2732 Leapin' Lizards

    传送门 这道题应用了网络流,主要考的是怎么转化为网络流求解,重点是怎么建图. 题意是给你一个n*m网格,每个格子可能有一个柱子,也可能没柱子,每个柱子上有一个最大跳出次数,用完了这个柱子就废了,每个柱 ...

  4. HDU Problem - 2732 Leapin' Lizards(最大流,拆点建边)

    题目链接 Problem Description Your platoon of wandering lizards has entered a strange room in the labyrin ...

  5. 【HDOJ】2732 Leapin' Lizards

    贪心+网络流.对于每个结点,构建入点和出点. 对于每一个lizard>0,构建边s->in position of lizard, 容量为1. 对于pillar>0, 构建边in p ...

  6. HDU-2732 Leapin' Lizards(网络流)

    HDU-2732 Leapin' Lizards(网络流) Your platoon of wandering lizards has entered a strange room in the la ...

  7. Leapin' Lizards HDU - 2732 (恶心的建图。。)

    这道题其实不难...就是建图恶心了点....emm... 题意: 多源多汇 + 拆边 青蛙跳柱子, 每根柱子都有一定的承载能力, 青蛙跳上去之后柱子的承载能力就会减一,跳到边界就能活 跳不到就over ...

  8. Leapin' Lizards 【HDU - 2732】【最大流】

    题目链接 题意:就是给你这样的N*M的点(其中M还没有给出,但是M可以算得),然后先输出N.D,N行,D是每个青蛙能跳的距离(欧拉距离,以为是曼哈顿距离的我WA了两发-- QAQ),然后是第一张N*M ...

  9. HDU-2732 Leapin' Lizards 最大流

    题目意思是有一些蜥蜴在一个迷宫里面,求这些蜥蜴还有多少是无论如何都逃不出来的.题目只给定一个行数,一个最远能够跳跃的距离,列数是不确定的(题目告知列数小于等于20),但是数据一定会是一个矩阵.每只蜥蜴 ...

  10. Leapin' Lizards(拆点+最大流建模)

    这是一道关于蜥蜴的题,光是题意就读了许久,这道题可以说是考察的很全面了,个人认为题目很好,可以多敲几遍练练手. 难点:1.读题. 题意大概是这样的,有一只蜥蜴,在一个房子里,输入第一个数T说明有T组. ...

最新文章

  1. 使用事务操作SQLite数据批量插入,提高数据批量写入速度,源码讲解
  2. 静态static关键字概述
  3. php悬浮图片,在JS中如何实现图片居中悬浮效果
  4. compose应用_带有PostgreSQLDocker Compose for Spring Boot应用程序
  5. OpenStack nova-network 支持多vlan技术实现片段代码
  6. 作为神经网络的输入_MATLAB实战|基于神经网络河南省降水量预测
  7. idea 远程调试_我的天!你竟然不会用IDEA远程调试Tomcat...
  8. python颜色填充代码_求懂WORD的大佬怎么一次性填充颜色或者使用python识别
  9. AndroidStudio安卓原生开发_Activity_中Activity显示/隐式启动Action和Category配置详解---Android原生开发工作笔记84
  10. android 键盘遮盖输入框_Android软键盘遮住输入框的解决方法终极适配
  11. 管理感悟:职责明确的结果,必然是无人管事
  12. htmlmo标签,HTML5 MathML
  13. 腾讯社交广告大赛总结
  14. 多多客id是什么意思_拼多多skuid是什么意思(关于sku编码的详细介绍)
  15. 设计师必备3Dmax插件盘点 最全插件展示
  16. 魔众视频管理系统 v3.4.0 常规优化 系统界面升级
  17. jupyter notebook中Nbextensions插件功能大全
  18. 跨境电商国外消费者线上购物心理分析
  19. 计算机文件夹操作教案,文件文件和文件夹教案
  20. 百度云不限速下载方法

热门文章

  1. Java基础之Java8中map和flatMap的使用
  2. 神机百炼2.50-负环SPFA
  3. 18JS09——作用域
  4. RabbitMQ学习(四) 订阅模式-Direct(直连)
  5. 云呐|固定资产如何管理比较好?公司固定资产怎么管理?
  6. SqlServer数据库死锁排查方法
  7. Unity中的遮罩面板逐渐清晰逐渐模糊功能
  8. HECTF2021 WP(部分)
  9. CSUST - 2021 组队选拔赛
  10. vue组件_组件通信_todo案例