BZOJ 1066[SCOI2007]蜥蜴
学了ISAP说我来做一道网络流的傻逼题吧然后自己变成了一个傻逼。。
De了很久的bug然后发现我从源点向每只蜥蜴连了INF的边,喵喵喵?
最近写博客好像比较敷衍,还是说一下。每个柱子拆点,源点向每个有蜥蜴的真点连1的边,每个真点向假点连石柱高的边,每个假点向它能到达的柱子的真点连INF的边,每个能跳出去的柱子向汇点连INF的边。
跑得比Dinic慢。
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<cmath> #include<queue> #include<vector> typedef long long LL; using namespace std; const int maxn=20000+25; const int INF=0x7fffffff; int tot,r,c,D,s,t,n,d[maxn],fir[maxn],cur[maxn],cnt[maxn],p[maxn],a[maxn],is[maxn],ecnt=1; char ss[50][50]; struct edge {int from,to,cap,flow,nxt;edge(){}edge(int from,int to,int cap,int flow,int nxt):from(from),to(to),cap(cap),flow(flow),nxt(nxt){} }e[maxn*2]; void add(int u,int v,int w) {e[++ecnt]=edge(u,v,w,0,fir[u]);e[++ecnt]=edge(v,u,0,0,fir[v]);fir[u]=ecnt-1; fir[v]=ecnt; } queue<int>que; void bfs() {for(int i=1;i<=n;i++) d[i]=n;d[t]=0; que.push(t);while(!que.empty()) {int x=que.front(); que.pop();for(int i=fir[x];i;i=e[i].nxt) if(d[e[i].to]==n&&e[i].flow==e[i].cap) {d[e[i].to]=d[x]+1;que.push(e[i].to);}} } int cal() {int res=INF;for(int x=t;x!=s;x=e[p[x]].from) res=min(res,e[p[x]].cap-e[p[x]].flow);for(int x=t;x!=s;x=e[p[x]].from) {e[p[x]].flow+=res;e[p[x]^1].flow-=res;}return res; } int Maxflow() {bfs();for(int i=1;i<=n;i++) cur[i]=fir[i],cnt[d[i]]++;int res=0;for(int x=s;d[x]<n;) {if(x==t) {res+=cal();x=s;}int ok=0;for(int &i=cur[x];i;i=e[i].nxt) if(d[e[i].to]+1==d[x]&&e[i].flow<e[i].cap){p[x=e[i].to]=i;ok=1;break; }if(!ok) {cur[x]=fir[x]; int M=n;for(int i=fir[x];i;i=e[i].nxt) if(e[i].cap>e[i].flow){M=min(M,d[e[i].to]+1);}if(!(--cnt[d[x]])) break;cnt[d[x]=M]++;if(x!=s) x=e[p[x]].from;}}return res; } double dis(int x,int y,int xx,int yy) {return sqrt((double)(x-xx)*(x-xx)+(double)(y-yy)*(y-yy));} void ADD(int x,int y) {for(int i=1;i<=r;i++)for(int j=1;j<=c;j++) if(i==x&&j==y) continue;else if(dis(x,y,i,j)<=(double)D) add(r*c+(x-1)*c+y,(i-1)*c+j,INF);add((x-1)*c+y,r*c+(x-1)*c+y,a[(x-1)*c+y]);if(min(x,r-x+1)<=D||min(y,c-y+1)<=D) add(r*c+(x-1)*c+y,t,INF); } void init() {scanf("%d%d%d",&r,&c,&D);s=r*c*2+1; t=r*c*2+2; n=t;for(int i=1;i<=r;i++) {for(int j=1;j<=c;j++) {char ch=getchar();while(ch<'0'||ch>'9') ch=getchar();a[(i-1)*c+j]=ch-'0';}}for(int i=1;i<=r;i++) {for(int j=1;j<=c;j++) {char ch=getchar();while(ch!='.'&&ch!='L') ch=getchar();if(ch=='L') {tot++; add(s,(i-1)*c+j,1);}}}for(int i=1;i<=r;i++)for(int j=1;j<=c;j++) ADD(i,j); } void work() {printf("%d\n",tot-Maxflow()); } int main() {init();work();return 0; }
View Code
转载于:https://www.cnblogs.com/Achenchen/p/7535695.html
BZOJ 1066[SCOI2007]蜥蜴相关推荐
- bzoj 1066: [SCOI2007]蜥蜴(最大流)
1066: [SCOI2007]蜥蜴 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 4116 Solved: 2081 [Submit][Statu ...
- 1066. [SCOI2007]蜥蜴【最大流】
Description 在一个r行c列的网格地图中有一些高度不同的石柱,一些石柱上站着一些蜥蜴,你的任务是让尽量多的蜥蜴逃 到边界外. 每行每列中相邻石柱的距离为1,蜥蜴的跳跃距离是d,即蜥蜴可以跳到 ...
- BZOJ 1066 POJ 2711 [SCOI2007]蜥蜴
1066: [SCOI2007]蜥蜴 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 2947 Solved: 1471 [ Submit][ S ...
- BZOJ1066: [SCOI2007]蜥蜴
1066: [SCOI2007]蜥蜴 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 4506 Solved: 2305 [Submit][Statu ...
- [SCOI2007] 蜥蜴 (最大流)
[SCOI2007] 蜥蜴 题目背景 07四川省选 题目描述 在一个r行c列的网格地图中有一些高度不同的石柱,一些石柱上站着一些蜥蜴,你的任务是让尽量多的蜥蜴逃到边界外. 每行每列中相邻石柱的距离为1 ...
- [SCOI2007]蜥蜴 (网格图经典四方向建边)
题意: 在一个n*m的矩阵中,每个格子都有一定的高度,当高度为0时表示该格子不存在,现在这个矩阵中有若干只蜥蜴,每只蜥蜴跳到格子上时,该格子的高度会减一,每只蜥蜴可以跳跃直线距离不大于D的长度,问最少 ...
- 洛谷 - P2472 [SCOI2007]蜥蜴(最大流)
题目链接:点击查看 题目大意:给出一个 n * m 的迷宫,每个位置都有一个耐久度,也就是至多经过 a[ i ][ j ] 位置 ( i , j ),现在迷宫中有一些蜥蜴,每一时刻在每一个位置至多有一 ...
- BZOJ 1070: [SCOI2007]修车(最小费用最大流)
建图很神奇..建完图其实就是裸的费用流了.. -------------------------------------------------------------- #include<cs ...
- BZOJ 1068: [SCOI2007]压缩
1068: [SCOI2007]压缩 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 1493 Solved: 941 [Submit][Status ...
最新文章
- python3模块文档_Python3模块-Python入门到精通
- 完美日记的微服务实践和优化思路
- 这里天刚黑,而家里都已经后半夜了
- python django mysql安装_Django+Nginx+uWSGI+Mysql搭建Python Web服务器
- Python+Opencv实现实时的条形码检测
- 文本检测算法新思路:基于区域重组的文本检测
- sscanf函数用法详解_「MOS考点详解」一道例题详解GETPIVOTDATA函数的用法
- php把整数拆分成数组,数组拆分处理(整数时的处理),该怎么处理
- 机器学习笔记(五)回归模型
- 原备案在腾讯云 如何操作新增网站备案
- 因为生活简单,所以内心强大
- 卖辣椒包的也要IPO:给肯德基们“打工”,但志不在此
- 网易互娱2017实习生招聘在线笔试第一场-2源代码编译
- Excel 如何根据单元格选中一行?
- 利用java计算长方形的面积
- 数据分析实战(一百零一):项目分析思路 —— 用户增长实践经验分享
- 美通企业日报 | 2020年中国薪酬预期涨幅6.5%;巴西将对中国游客免签
- H3C DIS命令记录
- html网页盒子整体放大,网页前端开发制作盒子拖拽、缩放
- PPTP协议详解及报文解析
热门文章
- csharp为何不流行_“我太南了”这些年度流行语到底是怎么选的?
- oracle 扩容undo,某银行积分系统数据库RAC环境扩充undo表空间
- idea编译器没有tomcat的选项解决方案
- 计算机网络cr什么意思,网络用语cr是什么意思
- sublime 设置自动更新_Win10关闭自动更新的三种方法
- 机器学习与数据挖掘_线性模型 II
- easyexcel 日期类型 convert_Excel个人笔记(数据类型)
- python如何设置画布开始位置_如何设置亚马逊站内广告?亚马逊自动广告手动广告都在什么位置?...
- linux中指令简约版
- 什么专业的会学python语言_还在纠结学什么编程语言吗?Python可能会“教”你做人...