解题:SCOI 2007 蜥蜴
拆点跑最大流
所有能跑出去的点连向汇点,容量为inf
原点连向所有初始有蜥蜴的点,容量为1
每根柱子拆成两个点“入口”和“出口”,入口向出口连容量为高度的边,出口向别的有高度的柱子的入口连容量为高度的边
#include<cmath>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=,M=,inf=1e9;
int n,m,d,f,b,s,t,t1,t2,t3,cnt,tot,ans;
int p[N],pp[N],dep[N],que[N],idx[N][N];
int noww[M],goal[M],flow[M];
char mapp[N][N];
void Link(int f,int t,int v)
{
noww[++cnt]=p[f],p[f]=cnt;
goal[cnt]=t,flow[cnt]=v;
noww[++cnt]=p[t],p[t]=cnt;
goal[cnt]=f,flow[cnt]=;
}
int Dis(int a,int b,int c,int d)
{
return (a-c)*(a-c)+(b-d)*(b-d);
}
void Init(int st,int ed)
{
for(int i=;i<=ed;i++)
pp[i]=p[i],dep[i]=-;
dep[st]=,que[f=b=]=st;
}
bool Layering(int st,int ed)
{
Init(st,ed);
while(f<=b)
{
int tn=que[f++];
for(int i=pp[tn];i;i=noww[i])
if(dep[goal[i]]==-&&flow[i])
dep[goal[i]]=dep[tn]+,que[++b]=goal[i];
}
return ~dep[ed];
}
int Augmenting(int nd,int ed,int mn)
{
if(nd==ed||!mn) return mn;
int tmp=,tep=;
for(int i=pp[nd];i;i=noww[i])
{
pp[nd]=i;
if(dep[goal[i]]==dep[nd]+)
if(tep=Augmenting(goal[i],ed,min(mn,flow[i])))
{
flow[i]-=tep,mn-=tep;
flow[i^]+=tep,tmp+=tep;
if(!mn) break;
}
}
return tmp;
}
int Dinic_Maxflow(int st,int ed)
{
int ret=;
while(Layering(st,ed))
ret+=Augmenting(st,ed,inf);
return ret;
}
int main ()
{
scanf("%d%d%d",&n,&m,&d);
s=*n*m+,t=s+,cnt=;
for(int i=;i<=n;i++)
{
scanf("%s",mapp[i]+);
for(int j=;j<=m;j++)
idx[i][j]=++tot;
}
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
if(mapp[i][j]!='')
{
Link(idx[i][j],idx[i][j]+n*m,mapp[i][j]-'');
if(i-d<||i+d>n||j-d<||j+d>m)
Link(idx[i][j]+n*m,t,inf);
else
for(int k=;k<=n;k++)
for(int h=;h<=m;h++)
if(Dis(i,j,k,h)<=d*d&&(i!=k||j!=h)&&mapp[k][h]!='')
Link(idx[i][j]+n*m,idx[k][h],mapp[i][j]-'');
}
for(int i=;i<=n;i++)
{
scanf("%s",mapp[i]+);
for(int j=;j<=m;j++)
if(mapp[i][j]=='L') ans++,Link(s,idx[i][j],);
}
printf("%d\n",ans-Dinic_Maxflow(s,t));
return ;
}
解题:SCOI 2007 蜥蜴的更多相关文章
- 【BZOJ 1069】【SCOI 2007】最大土地面积 凸包+旋转卡壳
因为凸壳上对踵点的单调性所以旋转卡壳线性绕一圈就可以啦啦啦--- 先求凸包,然后旋转卡壳记录$sum1$和$sum2$,最后统计答案就可以了 #include<cmath> #includ ...
- 图论(网络流):SCOI 2007 修车
同一时刻有N位车主带着他们的爱车来到了汽车维修中心.维修中心共有M位技术人员,不同的技术人员对不同的车进行维修所用的时间是不同的.现在需要安排这M位技术人员所维修的车及顺序,使得顾客平均等待的时间最小 ...
- [SCOI 2007] 修车
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1070 [算法] 首先 , 我们发现 , 在倒数第i个修车会对答案产生i * k的贡献 ...
- 【SCOI 2007】 降雨量
[题目链接] 点击打开链接 [算法] 线段树 此题细节很多,写程序时要细心! [代码] #include<bits/stdc++.h> using namespace std; #defi ...
- [ SCOI 2007 ] Perm
\(\\\) \(Description\) 给出只包括多个\(0\text~ 9\)的数字集,求有多少个本质不同的全排列,使得组成的数字能够整除\(M\). \(|S|\in [1,10]\),\( ...
- [SCOI 2007] 排列
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1072 [算法] 状压DP [代码] #include<bits/stdc++. ...
- 洛谷 P3620 [APIO/CTSC 2007]数据备份 解题报告
P3620 [APIO/CTSC 2007]数据备份 题目描述 你在一家 IT 公司为大型写字楼或办公楼(offices)的计算机数据做备份.然而数据备份的工作是枯燥乏味的,因此你想设计一个系统让不同 ...
- 解题:SCOI 2012 喵星球上的点名
题面 初见广义SAM 建立广义SAM,每次把询问走一遍,最终走到节点的子树里的猫老师都被这次点名点到 这样DFS parent树打时间戳记录入栈出栈时间,把问题转化成一个序列问题:给一个若干种颜色构成 ...
- 解题:WC 2007 石头剪刀布
题面 要我们把边定向,最大化留下来的三元环数目......并不能直接做,考虑容斥,去掉不合法的数目. 那么三个点不成环当且仅当有一个点出度为2一个点入度为2,发现最终答案就是$C_n^3-\sum C ...
随机推荐
- 20155204 王昊《网络对抗技术》EXP4
20155204 王昊<网络对抗技术>EXP4 一.实验后回答问题 (1)如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所有想监控下系统一天天的到底在干些什么.请设计下你想监控的操作有 ...
- 20155233 《网络对抗技术》EXP3 免杀原理与实践
正确使用msf编码器,msfvenom生成如jar之类的其他文件,veil-evasion,自己利用shellcode编程等免杀工具或技巧 使用msf编码器生成jar包 输入命令msfvenom -p ...
- Android开发——RecyclerView特性以及基本使用方法(一)
)关于点击事件,没有像ListView那样现成的API,但是自己封装起来也不难,而且我们使用ListView时,如果item中有可点击组件,那么点击事件的冲突也是一个问题,而在RecyclerView ...
- Android开发——Fragment知识整理(一)
0. 前言 Fragment,顾名思义是片段的意思,可以把Fragment当成Activity的一个组成部分,甚至Activity的界面可以完全有不同的Fragment组成.Fragment需要被嵌 ...
- 【LG4248】[AHOI2013]差异
[LG4248][AHOI2013]差异 题面 洛谷 题解 后缀数组版做法戳我 我们将原串\(reverse\),根据后缀自动机的性质,两个后缀的\(lcp\)一定是我们在反串后两个前缀的\(lca\ ...
- Javascript与后台相互访问
(1)Javascript访问C#后台变量或函数 A.通过<%=%>的形式访问 var str = "<%=GetStr() %>"; var str = ...
- python实现并发爬虫
在进行单个爬虫抓取的时候,我们不可能按照一次抓取一个url的方式进行网页抓取,这样效率低,也浪费了cpu的资源.目前python上面进行并发抓取的实现方式主要有以下几种:进程,线程,协程.进程不在的讨 ...
- 委托、多播委托(MulticastDelegate)
委托.多播委托(MulticastDelegate) 多播委托(MulticastDelegate)继承自 Delegate ,表示多路广播委托:即,其调用列表中可以拥有多个元素的委托.实际上,我们自 ...
- 如何在内网安装compass
神器compass是肿么用这里不做介绍,因为我也不清楚,可参考官网:http://compass-style.org.这里主要介绍如何在内网安装compass. 首先介绍一般是如何安装compass的 ...
- Notepad++常用插件
Notepad++常用插件 1.CCompletion 进行文本的方法查找的工具. 会点击Ccompletion中的CCompletion菜单,就会出现菜单选择框 2.Compare 进行文本比较的工 ...