P2472 [SCOI2007]蜥蜴(网络流)】的更多相关文章

P2472 [SCOI2007]蜥蜴 把每个点拆成2个点,两点之间连边的边权为石柱高度 新建虚拟源点$S$和汇点$T$ $S$向所有有蜥蜴的点连边,边权1 其他边都连$inf$ 剩下就是裸的$dinic$辣 #include<iostream> #include<cstdio> #include<cstring> #include<queue> using namespace std; #define N 200005 inline int Min(int…
P2472 [SCOI2007]蜥蜴 自己第一道独立做题且一遍AC的网络流题纪念... 看到这道题我就想到网络流建图的方式了... 首先根据每个高度,我们将每个点拆成两个点限流.之后根据跳的最大距离,连边,最后能跳出边界的与t连边,跑最大流即可... 突然发现最大流与网格图好像有着某种联系... #include<bits/stdc++.h> #define ll long long using namespace std; const int N=21,INF=1e9; int h[N][N…
P2472 [SCOI2007]蜥蜴 题目描述 在一个r行c列的网格地图中有一些高度不同的石柱,一些石柱上站着一些蜥蜴,你的任务是让尽量多的蜥蜴逃到边界外. 每行每列中相邻石柱的距离为1,蜥蜴的跳跃距离是d,即蜥蜴可以跳到平面距离不超过d的任何一个石柱上.石柱都不稳定,每次当蜥蜴跳跃时,所离开的石柱高度减1(如果仍然落在地图内部,则到达的石柱高度不变),如果该石柱原来高度为1,则蜥蜴离开后消失.以后其他蜥蜴不能落脚.任何时刻不能有两只蜥蜴在同一个石柱上. 输入输出格式 输入格式: 输入第一行为三…
题目 P2472 [SCOI2007]蜥蜴 解析 这个题思路比较清晰,本(qi)来(shi)以(jiu)为(shi)无脑建图跑最大流,结果挂了,整了一个小时后重新建图才过的. 建立一个超级源点和一个超级汇点, 每个石柱都有其固定的通过的次数,也就是说我们要限制其通过次数,怎么限制呢,拆点,把每个有石柱的点拆成两个,相连的边流量为其高度,这样就做到了限制其通过次数 对于\((i,j)\)位置 如果有石柱,连一条\((i,j)->(i,j)+n\times c\),流量为石柱高度的边,来表示石柱可以…
题目链接 给一个n*m的图, 里面每一个点代表一个石柱, 石柱有一个高度. 初始时有些石柱上面有蜥蜴, 蜥蜴可以跳到距离他曼哈顿距离小于等于d的任意一个石柱上,跳完后, 他原来所在的石柱高度会减一, 如果高度变为0, 那么石柱消失, 无法在跳到这个位置上, 跳到的那个石柱高度不会发生改变, 同一时刻一个石柱无法站两个蜥蜴.问有多少蜥蜴无法跳出边界. 很裸的网络流, 如果一个石柱距离边界距离小于d, 那么向汇点连一条权值为inf的边, 如果一个石柱初始有蜥蜴, 那么源点向这个点连一条1的边, 每个…
传送门 求无法逃离的蜥蜴总数的最小值就是求最多逃离的蜥蜴总数 所以显然考虑最大流,一个流量的路径就相当于一只蜥蜴逃离的路径 发现每个位置有一个最大经过次数,所以把每个位置拆成两个点$x,y$,$x$ 到 $y$ 连流量为最大经过次数的边 从源点向每个蜥蜴的初始位置的 $x$ 连一条流量为 $1$ 的边,表示初始时这些位置有蜥蜴 然后对于每一个位置 $u$, $dfs$ 找出所有走 $d$ 步以内能到的位置 $v$,然后从 $u$ 的 $y$ 点向 $v$ 的 $x$ 点连一条流量 $INF$ 的…
题目链接: https://www.luogu.org/problemnew/show/P2472 分析: 这道题用最大流解决. 首先构建模型. 一根柱子可以跳入和跳出,于是拆成两个点:入点和出点. 每一根柱子的入点和出点连一条流量为高度的边,来限制蜥蜴跳入的次数. 当柱子a可以调到柱子b时,就从a的出点向b的入点连边,流量inf. S向所有有蜥蜴的柱子的入点连边,流量为1 T表示地图外一点,当一根柱子能跳到地图外时,则出点向T连流量为inf的边. 然后跑最大流即可. 这里要注意数组的范围以及拆…
题目链接: 蜥蜴 题目分析: 一道网络流,先来分析一下问题: 在一个\(r*c\)的图中分布了一些数,其他地方都用\(0\)填充,我们分别从指定的一些数出发,每次可以移动到周围距离为\(d\)以内的数上(或图外),原来的数会被\(-1\),任何时候数不能为负.各个数走法之间互相影响.问至多有多少个数出发能到达图外? 把这个题的限制条件列出来一下吧: 每个石柱只能站一只蜥蜴 每个石柱最多被经过其高度次 石柱与石柱之间,石柱与图边界之间要距离小于等于\(d\)才能到达 首先我的角度是以每个石柱本身的…
在一个r行c列的网格地图中有一些高度不同的石柱,一些石柱上站着一些蜥蜴,你的任务是让尽量多的蜥蜴逃到边界外. 每行每列中相邻石柱的距离为1,蜥蜴的跳跃距离是d,即蜥蜴可以跳到平面距离不超过d的任何一个石柱上.石柱都不稳定,每次当蜥蜴跳跃时,所离开的石柱高度减1(如果仍然落在地图内部,则到达的石柱高度不变),如果该石柱原来高度为1,则蜥蜴离开后消失.以后其他蜥蜴不能落脚.任何时刻不能有两只蜥蜴在同一个石柱上. Input 输入第一行为三个整数r,c,d,即地图的规模与最大跳跃距离.以下r行为石竹的…
原题传送门 题目要求无法逃离的最少有多少 直接做肯定不好做,我们帮题目变一个说法:最多能逃离多少 这个询问一看就是最大流 考虑如何建图: 1.将S和每一个有蜥蜴的点连一条流量为1的边(每个蜥蜴只能用1次) 2.每个点拆成两个点(一个点用来连接从其他点连来的边,另一个点用来向其他的点连边,下同),从前一个点向后一个点连一条流量为石柱高度的边(每个石柱只能踩它的高度次) 3.能互相到达的石柱之间连一条流量为inf的边 4.将每一个能跳出地图的点向T连一条流量为inf边 建图后跑一下最大流即可求出答案…