蜥蜴-DInic
题目背景
07四川省选
题目描述
在一个r行c列的网格地图中有一些高度不同的石柱,一些石柱上站着一些蜥蜴,你的任务是让尽量多的蜥蜴逃到边界外。
每行每列中相邻石柱的距离为1,蜥蜴的跳跃距离是d,即蜥蜴可以跳到平面距离不超过d的任何一个石柱上。石柱都不稳定,每次当蜥蜴跳跃时,所离开的石柱高度减1(如果仍然落在地图内部,则到达的石柱高度不变),如果该石柱原来高度为1,则蜥蜴离开后消失。以后其他蜥蜴不能落脚。任何时刻不能有两只蜥蜴在同一个石柱上。
输入输出格式
输入格式:
输入第一行为三个整数r,c,d,即地图的规模与最大跳跃距离。以下r行为石竹的初始状态,0表示没有石柱,1~3表示石柱的初始高度。以下r行为蜥蜴位置,“L”表示蜥蜴,“.”表示没有蜥蜴。
输出格式:
输出仅一行,包含一个整数,即无法逃离的蜥蜴总数的最小值。
输入输出样例
5 8 2
00000000
02000000
00321100
02000000
00000000
........
........
..LLLL..
........
........
1
说明
100%的数据满足:1<=r, c<=20, 1<=d<=3
写代码时犯了三个错误
*注意柱子间建边条件。满足条件:不在同一列 或 不在同一行 不是既 在同一列 或 不在同一行。
*读入的是字符。
*出图条件。
*数组大小。至多有400个点。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#include<vector>
#include<math.h>
using namespace std;
#define M 99893535
int c,r,d,dd,s,t,tot,na[][],ans,m1[][],dep[],map[][];
char m2[][];
int dfs(int u,int t,int f)
{
if(u==t) return f;
int d;
for(int v=;v<=tot;v++)
if(map[u][v]>&&dep[v]==dep[u]+&&(d=dfs(v,t,min(f,map[u][v]))))
{
map[u][v]-=d;
map[v][u]+=d;
return d;
}
return ;
}
int bfs(int s=,int t=)
{
queue<int>q;q.push(s);
memset(dep,-,sizeof(dep));
dep[s]=;
while(!q.empty()){
int u=q.front();q.pop();
for(int v=;v<=tot;v++)
if(map[u][v]>&&dep[v]==-)
{
dep[v]=dep[u]+;
q.push(v);
}
}
return dep[t]!=-;
}
int dinic()
{
int flow=,f=;
while(bfs(,))
while(){
f=dfs(,,M);
if(!f) break;
flow+=f;
}
return flow;
}
void find(int x,int y)
{
int now=na[x][y]+;
for(int i=;i<=r;i++)
for(int j=;j<=c;j++)
if( (i!=x||j!=y) &&m1[i][j]>)
if(d*d>= ((x-i)*(x-i)+(y-j)*(y-j)) )
map[now][ na[i][j] ]=M;
}
int main()
{
s=,t=,tot=;
scanf("%d%d%d",&r,&c,&d);
for(int i=;i<=r;i++)
for(int j=;j<=c;j++)
{
char oo;
cin>>oo;
m1[i][j]=oo-'';
if(m1[i][j])
{
int w=na[i][j]=++tot;tot++;
map[w][w+]=m1[i][j]; }
}
char o;
for(int i=;i<=r;i++)
for(int j=;j<=c;j++)
{
cin>>o; m2[i][j]=o;
if(o=='L')
{
int w=na[i][j];
map[s][w]=;
ans++;
}
}
for(int i=;i<=r;i++)
for(int j=;j<=c;j++)
if(m1[i][j])
{
find(i,j);
if(i<=d||j<=d||(r-i+)<=d||(c-j+)<=d)
map[ na[i][j]+ ][t]=M ;
}
printf("%d",ans-dinic());
return ;
}
蜥蜴-DInic的更多相关文章
- bzoj1066 蜥蜴 (dinic)
最大流板子题. 对于每根柱子,建两个点ai,bi,建边(ai,bi,柱子高度) 对于距离不超过d的两根柱子i,j,建边(bi,aj,inf) 对于起始位置在i的每个蜥蜴,建边(S,ai,1) 对于能跳 ...
- 1066: [SCOI2007]蜥蜴
1066: [SCOI2007]蜥蜴 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 3545 Solved: 1771[Submit][Status] ...
- bzoj 1066 蜥蜴
最大流. 建图:首先将每根柱子拆成两个点. 每根柱子的入点向出点连一条容量为柱子高度的边. 每根柱子的出点向可以到达的柱子的入点连一条容量为正无穷的边. 源点向每根初始有蜥蜴的柱子的入点连一条容量为一 ...
- BZOJ 1066 【SCOI2007】 蜥蜴
Description 在一个r行c列的网格地图中有一些高度不同的石柱,一些石柱上站着一些蜥蜴,你的任务是让尽量多的蜥蜴逃到边界外. 每行每列中相邻石柱的距离为$1$,蜥蜴的跳跃距离是d,即蜥蜴可以跳 ...
- 蜥蜴(bzoj 1066)
Description 在一个r行c列的网格地图中有一些高度不同的石柱,一些石柱上站着一些蜥蜴,你的任务是让尽量多的蜥蜴逃到边界外. 每行每列中相邻石柱的距离为1,蜥蜴的跳跃距离是d,即蜥蜴可以跳到平 ...
- BZOJ 1066 POJ 2711 [SCOI2007]蜥蜴
与POJ 1815 Friendship类似,该题之前也做过 目前处于TLE状态.样例已经通过 1066: [SCOI2007]蜥蜴 Time Limit: 1 Sec Memory Limit: ...
- 【bzoj1066】[SCOI2007]蜥蜴 网络最大流
[bzoj1066][SCOI2007]蜥蜴 Description 在一个r行c列的网格地图中有一些高度不同的石柱,一些石柱上站着一些蜥蜴,你的任务是让尽量多的蜥蜴逃到边界外. 每行每列中相邻石柱的 ...
- BZOJ1066 [SCOI2007]蜥蜴
首先...这是道(很水的)网络流 我们发现"每个时刻不能有两个蜥蜴在同一个柱子上"这个条件是没有用的因为可以让外面的先跳,再让里面的往外跳 但是还有柱子高度的限制,于是把柱子拆点为 ...
- poj 2711 Leapin' Lizards && BZOJ 1066: [SCOI2007]蜥蜴 最大流
题目链接:http://poj.org/problem?id=2711 题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1066 Your p ...
随机推荐
- 【转载】rageagainstthecage.c源码以及注释
如下: //头文件包含 #include <stdio.h> #include <sys/types.h> #include <sys/time.h> #inclu ...
- kallsyms
kallsyms 在v2.6.0的内核中,为了更好地调试内核,引入新的功能kallsyms.kallsyms把内核用到的所有函数地址和名称连接进内核文件,当内核启动后,同时加载到内存中.
- P1816 忠诚
题目描述 老管家是一个聪明能干的人.他为财主工作了整整10年,财主为了让自已账目更加清楚.要求管家每天记k次账,由于管家聪明能干,因而管家总是让财主十分满意.但是由于一些人的挑拨,财主还是对管家产生了 ...
- js中this 的四种用法
this 在函数执行时,this 总是指向调用该函数的对象.要判断 this 的指向,其实就是判断 this 所在的函数属于谁. 在<javaScript语言精粹>这本书中,把 this ...
- 开始我的技术bolg之旅
虽然做了快十年的IT但是真心觉得自己的水平很烂,IT这个行业keep learning很重要,之前每接触新东西都是随便学一下,有问题解决了就完事了,或者是再有问题临时抱佛脚,从来都没把学过或者做个的事 ...
- ViewerJS 一个在浏览器上查看 PDF 和电子表格的 JavaScript 库
Viewer.js简介 http://viewerjs.org/ 下载Viewer.js压缩包,解压后将ViewerJS文件夹放在网站根目录下 在浏览器地址栏中输入网址http://172.16.8. ...
- CodeForces Gym 100685I Innovative Business (贪心)
题意:给定一条路的长和宽,然后给你瓷砖的长和宽,你只能横着或者竖着铺,也可以切成片,但是每条边只能对应一条边,问你最少要多少瓷砖. 析:先整块整块的放,然后再考虑剩下部分,剩下的再分成3部分,先横着, ...
- javascript runat server
<script runat="server"> protected void SubmitBtn_Click(object sender, EventArgs e) { ...
- sql查询的时候,等于这两个的值得全部取出来
sql查询的时候 用or连接 ad.jqtype='人文历史' or ad.jqtype='名胜古迹'
- HDU5918【KMP大法好,虽然我不会】
#include <bits/stdc++.h> using namespace std; typedef long long LL; const; int n,m; int a[MAX] ...