P2472 [SCOI2007] 蜥蜴
时间:2023-03-21
本文章向大家介绍P2472 [SCOI2007] 蜥蜴,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
在一个 R 行 C列的网格地图中有一些高度不同的石柱,第 ii 行 jj 列的石柱高度为 a[i][j]
一些石柱上站着一些蜥蜴,你的任务是让尽量多的蜥蜴逃到边界外。
每行每列中相邻石柱的距离为 1,蜥蜴的跳跃距离是 D,即蜥蜴可以跳到平面距离不超过 D 的任何一个石柱上。
石柱都不稳定,每次当蜥蜴跳跃时,所离开的石柱高度减 1(如果仍然落在地图内部,则到达的石柱高度不变)。
如果该石柱原来高度为 1,则蜥蜴离开后消失,以后其他蜥蜴不能落脚。
任何时刻不能有两只蜥蜴在同一个石柱上。问无法逃离的蜥蜴总数的最小值。
网络流建模,把点拆为2个
#include <iostream> #include<cmath> #include <queue> #include <cstring> #define IOS std::ios::sync_with_stdio(0) using namespace std; const int N =1e4+100,M=7e5+100; const int inf =1e9; int a[N][N]; int all=1,hd[N],go[M],w[M],nxt[M]; int S,T; int dis[M],ans=0,now[M]; int R,C,D; void add_(int x,int y,int z){ nxt[++all]=hd[x]; hd[x]=all; go[all]=y; w[all]=z; swap(x,y); nxt[++all]=hd[x]; hd[x]=all; go[all]=y; w[all]=0; } bool bfs(){ for(int i=0;i<N;i++) dis[i]=inf; queue<int> q; q.push(S); now[S]=hd[S]; dis[S]=0; while(q.empty()==0){ int x=q.front(); q.pop(); for(int i=hd[x];i;i=nxt[i]){ int y=go[i]; if(w[i]>0&&dis[y]==inf){ dis[y]=dis[x]+1; now[y]=hd[y]; q.push(y); if(y==T) return 1; } } } return 0; } int dfs(int x,int sum){ if(x==T) return sum; int k,res=0; for(int i=now[x];i&∑i=nxt[i]){ now[x]=i; int y=go[i]; if(w[i]>0&&(dis[y]==dis[x]+1)){ k=dfs(y,min(sum,w[i])); if(k==0) dis[y]=inf; w[i]-=k; w[i^1]+=k; res+=k; sum-=k; } } return res; } int ID(int i,int j){ return (i-1)*R+j ; } double Dis(int x1,int y1,int x2,int y2){ return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)); } signed main(){ int Cnt= 0; cin>>R>>C>>D; char c; int i,j; S=0,T=2*R*C+1; for(i=1;i<=R;i++) for(j=1;j<=C;j++){ cin>>c; a[i][j] =c-'0'; } for(i=1;i<=R;i++) for(j=1;j<=C;j++){ cin>>c; if(c=='L'){ Cnt++; add_(S,ID(i,j),1); } } for(i=1;i<=R;i++) for(j=1;j<=C;j++){ if(a[i][j]) add_(ID(i,j),ID(i,j)+R*C,a[i][j]) ; } for(i=1;i<=R;i++) for(j=1;j<=C;j++){ if(i>D && i<=R-D && j>D && j<=C-D) continue ; if(a[i][j]) add_(ID(i,j)+R*C,T, a[i][j]) ; } for(i=1;i<=R;i++) for(j=1;j<=C;j++) for(int k=1;k<=R;k++) for(int l=1;l<=C;l++){ if(i==k && j==l ) continue ; if(Dis(i,j,k,l)<=double(D)&& a[i][j]&&a[k][l]) add_(ID(i,j)+R*C,ID(k,l),inf) ; } int ans =0; while(bfs()) ans+=dfs(S,inf); cout<< Cnt - ans<<endl; }
原文地址:https://www.cnblogs.com/towboa/p/17238569.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 爬取数据缺失的补坑,Python数据爬取的坑坑洼洼如何铲平
- 如何开发跨框架的组件
- SpringBoot系列之异步任务@Async使用教程
- 深入k8s:k8s部署&在k8s中运行第一个程序
- Java是如何实现Future模式的?万字详解!
- Tensorflow基础入门十大操作总结
- Django个人博客,三小时带你入门Django框架
- 微信公众号文章采集工具,可采集文章文字内容信息及图片
- Python打包GUI界面组件汇总,Tkinter(TK)实例代码
- 知了超细讲解Django打造大型企业官网学习记录,02diango url 笔记
- 直播卖货小程序源码中,商品分类页面是如何实现的
- python requests.session验证码登录应用实战,爱站关键词挖掘采集
- 【淘宝】python的淘宝秒杀抢购下单源码参考
- Python素材下载爬虫,ui素材下载爬取采集源码
- Python与seo的应用,sitemap.xml文件制作工具源码