HDU-2732 Leapin' Lizards
拆点+建图+源点汇点,再用最大流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相关推荐
- hdu 2732 Leapin' Lizards (经典网络流)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2732 Your platoon of wandering lizards has entered a ...
- HDU - 2732 Leapin' Lizards(最大流+思维建边)
题目链接:点击查看 题目大意:给出两个n*m的迷宫,第一个迷宫中表示每个柱子的耐久度,第二个迷宫表示的是每一只蜥蜴的位置,现在给出每只蜥蜴可以跳跃的最大曼哈顿距离,规定跳出迷宫边界就可以逃离迷宫,现在 ...
- HDU 2732 Leapin' Lizards
传送门 这道题应用了网络流,主要考的是怎么转化为网络流求解,重点是怎么建图. 题意是给你一个n*m网格,每个格子可能有一个柱子,也可能没柱子,每个柱子上有一个最大跳出次数,用完了这个柱子就废了,每个柱 ...
- HDU Problem - 2732 Leapin' Lizards(最大流,拆点建边)
题目链接 Problem Description Your platoon of wandering lizards has entered a strange room in the labyrin ...
- 【HDOJ】2732 Leapin' Lizards
贪心+网络流.对于每个结点,构建入点和出点. 对于每一个lizard>0,构建边s->in position of lizard, 容量为1. 对于pillar>0, 构建边in p ...
- HDU-2732 Leapin' Lizards(网络流)
HDU-2732 Leapin' Lizards(网络流) Your platoon of wandering lizards has entered a strange room in the la ...
- Leapin' Lizards HDU - 2732 (恶心的建图。。)
这道题其实不难...就是建图恶心了点....emm... 题意: 多源多汇 + 拆边 青蛙跳柱子, 每根柱子都有一定的承载能力, 青蛙跳上去之后柱子的承载能力就会减一,跳到边界就能活 跳不到就over ...
- Leapin' Lizards 【HDU - 2732】【最大流】
题目链接 题意:就是给你这样的N*M的点(其中M还没有给出,但是M可以算得),然后先输出N.D,N行,D是每个青蛙能跳的距离(欧拉距离,以为是曼哈顿距离的我WA了两发-- QAQ),然后是第一张N*M ...
- HDU-2732 Leapin' Lizards 最大流
题目意思是有一些蜥蜴在一个迷宫里面,求这些蜥蜴还有多少是无论如何都逃不出来的.题目只给定一个行数,一个最远能够跳跃的距离,列数是不确定的(题目告知列数小于等于20),但是数据一定会是一个矩阵.每只蜥蜴 ...
- Leapin' Lizards(拆点+最大流建模)
这是一道关于蜥蜴的题,光是题意就读了许久,这道题可以说是考察的很全面了,个人认为题目很好,可以多敲几遍练练手. 难点:1.读题. 题意大概是这样的,有一只蜥蜴,在一个房子里,输入第一个数T说明有T组. ...
最新文章
- 使用事务操作SQLite数据批量插入,提高数据批量写入速度,源码讲解
- 静态static关键字概述
- php悬浮图片,在JS中如何实现图片居中悬浮效果
- compose应用_带有PostgreSQLDocker Compose for Spring Boot应用程序
- OpenStack nova-network 支持多vlan技术实现片段代码
- 作为神经网络的输入_MATLAB实战|基于神经网络河南省降水量预测
- idea 远程调试_我的天!你竟然不会用IDEA远程调试Tomcat...
- python颜色填充代码_求懂WORD的大佬怎么一次性填充颜色或者使用python识别
- AndroidStudio安卓原生开发_Activity_中Activity显示/隐式启动Action和Category配置详解---Android原生开发工作笔记84
- android 键盘遮盖输入框_Android软键盘遮住输入框的解决方法终极适配
- 管理感悟:职责明确的结果,必然是无人管事
- htmlmo标签,HTML5 MathML
- 腾讯社交广告大赛总结
- 多多客id是什么意思_拼多多skuid是什么意思(关于sku编码的详细介绍)
- 设计师必备3Dmax插件盘点 最全插件展示
- 魔众视频管理系统 v3.4.0 常规优化 系统界面升级
- jupyter notebook中Nbextensions插件功能大全
- 跨境电商国外消费者线上购物心理分析
- 计算机文件夹操作教案,文件文件和文件夹教案
- 百度云不限速下载方法