题目传送门


题目大意

\(P\)行\(Q\)列的楼房高度均为\(R\),每一层改造要花费一定的金钱,

每个楼房都要挑选有且仅有一层进行改造,并且相邻两个楼房改造位置的相对高度不能超过\(D\),

问最小花费


分析

原题目更能看出是最小割,但是这样题意更能懂一些,

可以建一个分层图,建一个虚拟层,这样把点换为边,

接着源点连第一层,虚拟层连汇点,容量无穷大

但是相对高度怎么搞,就是让它割不掉嘛

若两个点\((x_1,y_1),(x_2,y_2)\)相邻,

那么\((x_1,y_1,k)\)与\((x_2,y_2,k+D)\)连一条边,容量无穷大,就好了


代码

#include <cstdio>
#include <cctype>
#include <queue>
#define rr register
using namespace std;
const int inf=1e7,N=66011;
struct node{int y,w,next;}e[N*11];
const int dx[4]={0,1,0,-1},dy[4]={1,0,-1,0};
int ls[N],dis[N],P,Q,R,D,ans,s,t,k=1; bool v[N];
inline signed iut(){
rr int ans=0,f=1; rr char c=getchar();
while (!isdigit(c)) f=(c=='-')?-f:f,c=getchar();
while (isdigit(c)) ans=(ans<<3)+(ans<<1)+(c^48),c=getchar();
return ans*f;
}
inline void add(int x,int y,int w){
e[++k]=(node){y,w,ls[x]}; ls[x]=k;
e[++k]=(node){x,0,ls[y]}; ls[y]=k;
}
inline signed bfs(int s){
for (rr int i=1;i<=t;++i) dis[i]=0;
queue<int>q; q.push(s); dis[s]=1;
while (q.size()){
rr int x=q.front(); q.pop();
for (rr int i=ls[x];i;i=e[i].next)
if (e[i].w>0&&!dis[e[i].y]){
dis[e[i].y]=dis[x]+1;
if (e[i].y==t) return 1;
q.push(e[i].y);
}
}
return 0;
}
inline signed dfs(int x,int now){
if (x==t||!now) return now;
rr int rest=0,f;
for (rr int i=ls[x];i;i=e[i].next)
if (e[i].w>0&&dis[e[i].y]==dis[x]+1){
rest+=(f=dfs(e[i].y,min(now-rest,e[i].w)));
e[i].w-=f; e[i^1].w+=f;
if (now==rest) return rest;
}
if (!rest) dis[x]=0;
return rest;
}
signed main(){
P=iut(),Q=iut(),R=iut(),
D=iut(),s=P*Q*(R+1)+1,t=s+1;
for (rr int i=1;i<=R;++i)
for (rr int j=1;j<=P;++j)
for (rr int k=1;k<=Q;++k)
add((i*P+j-P-1)*Q+k,(i*P+j-1)*Q+k,iut());
for (rr int i=1;i<=P;++i)
for (rr int j=1;j<=Q;++j)
add(s,(i-1)*Q+j,inf),add((R*P+i-1)*Q+j,t,inf);
for (rr int i=1;i<=P;++i)
for (rr int j=1;j<=Q;++j)
for (rr int u=0;u<4;++u){
rr int x=i+dx[u],y=j+dy[u];
if (x<1||x>P||y<1||y>Q) continue;
for (rr int h=D;h<=R;++h)
add((h*P+i-1)*Q+j,(h*P-D*P+x-1)*Q+y,inf);
}
while (bfs(s)) ans+=dfs(s,inf);
return !printf("%d",ans);
}

#网络流,dinic,最小割#洛谷 3227 [HNOI2013]切糕的更多相关文章

  1. 洛谷 P3227 [HNOI2013]切糕(最小割)

    题解 Dinic求最小割 题目其实就是求最小的代价使得每个纵轴被分成两部分 最小割!!! 我们把每个点抽象成一条边,一个纵轴就是一条\(S-T\)的路径 但是题目要求\(|f(x,y)-f(x',y' ...

  2. 洛谷$P3227\ [HNOI2013]$切糕 网络流

    正解:网络流 解题报告: 传送门! 日常看不懂题系列,,,$QAQ$ 所以先放下题目大意趴$QwQ$,就说有个$p\cdot q$的矩阵,每个位置可以填一个$[1,R]$范围内的整数$a_{i,j}$ ...

  3. [洛谷P3227][HNOI2013]切糕

    题目大意:有一个$n\times m$的切糕,每一个位置的高度可以在$[1,k]$之间,每个高度有一个代价,要求四联通的两个格子之间高度最多相差$D$,问可行的最小代价.$n,m,k,D\leqsla ...

  4. 【BZOJ2229】[ZJOI2011]最小割(网络流,最小割树)

    [BZOJ2229][ZJOI2011]最小割(网络流,最小割树) 题面 BZOJ 洛谷 题解 戳这里 那么实现过程就是任选两点跑最小割更新答案,然后把点集划分为和\(S\)联通以及与\(T\)联通. ...

  5. 【CF331E】Biologist(网络流,最小割)

    [CF331E]Biologist(网络流,最小割) 题面 洛谷 翻译: 有一个长度为\(n\)的\(01\)串,将第\(i\)个位置变为另外一个数字的代价是\(v_i\). 有\(m\)个要求 每个 ...

  6. 【BZOJ1391】Order(网络流,最小割)

    [BZOJ1391]Order(网络流,最小割) 题面 BZOJ权限题... 良心洛谷 题目描述 有N个工作,M种机器,每种机器你可以租或者买过来. 每个工作包括若干道工序,每道工序需要某种机器来完成 ...

  7. 【BZOJ3144】切糕(网络流,最小割)

    [BZOJ3144]切糕(网络流,最小割) 题面 BZOJ 题解 这样的类型很有趣 先不考虑相邻距离差不能超过\(D\)的限制 我们考虑答案,显然就是在每个位置选一个最小的高度割就行了 化成最小割的模 ...

  8. [bzoj1497][NOI2006]最大获利_网络流_最小割

    最大获利 bzoj-1497 题目大意:可以建立一个点,花费一定的代价:将已经建立的两个点之间连边,得到一定收益.有些节点之间是不允许连边的. 注释:1<=点数<=5,000,1<= ...

  9. [TJOI2013]攻击装置(网络流,最小割)

    前言 网络流被hbx吊起来打 Solution 考虑一下这个走法是不是和象棋中马的走法一模一样(废话) 那么显然我每一次移动是走三次,如果将棋盘二分图染色一下,不就是每一次只能走到另一个颜色的吗? 然 ...

  10. [bzoj2561]最小生成树_网络流_最小割_最小生成树

    最小生成树 bzoj-2561 题目大意:题目链接. 注释:略. 想法: 我们发现: 如果一条权值为$L$的边想加入到最小生成树上的话,需要满足一下条件. 就是求出原图的最小生成树之后,这个边当做非树 ...

随机推荐

  1. 一秒出图?SDXL-Turbo实时AI绘画整合包下载

    SDXL Turbo是一种快速生成的AI构图模型,它基于一种称为对抗性扩散蒸馏的新训练方法,该方法允许在1到4个步骤中以高图像质量对大规模基础图像扩散模型进行采样,并将其与对抗性损失相结合,以确保即使 ...

  2. VMware虚拟机Ubuntu系统如何占满整个屏幕

    VMware虚拟机Ubuntu系统分辨率调节 桌面右击--Disoplay Settings 选择一个跟本机系统一样或者相近的.(本机小米笔记本win11,具体看自己的情况) 结束.

  3. SSH不对称密钥自动登入服务器

    SSH不对称密钥自动登入服务器 1.先在自己的电脑上创建密钥对 ssh-keygen -t rsa Windows下生成SSH密钥 $ ssh-keygen -t rsa -C "youre ...

  4. Spring-Cloud集成redis-cluster

    前言 系统之前接入的是单点redis,为了条系统高可用能力,特增加集成redis-cluster集群的步骤 依赖库引入 <dependency> <groupId>org.sp ...

  5. 【2024面试刷题】一、Spring Cloud 面试题

    1.什么是 Spring Cloud? Spring Cloud是一系列框架的有序集合.它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如 服务发现注册.配置中心.智能路 ...

  6. Java package(包) +import 关键字(2)

    1 package com.bytezero.exer; 2 3 import java.lang.reflect.Field; 4 5 //import java.util.ArrayList; 6 ...

  7. Redis集群Cluster

    Redis Cluster 是社区版推出的 Redis 分布式集群解决方案,主要解决 Redis 分布式方面的需求,比如,当遇到单机内存,并发和流量等瓶颈的时候,Redis Cluster 能起到很好 ...

  8. Educational Codeforces Round 143 (Rated for Div. 2)C. Tea Tasting(前缀和+二分、贡献枚举)

    C. Tea Tasting 思路 这里枚举有三种思路 然后经过考虑3是最可行的,然后接着考虑如何计算贡献 这里在实现的时候用了一个差分数组,因为我们需要记录第i个茶师它喝了多少个\(b_i\)以及不 ...

  9. dnsmasq 本地局域网DNS服务器搭建

    项目背景 因为本地环境需要使用域名进行调试,需要DNS服务器 DNS 机器IP:192.168.5.249   dnsmasq 服务端部署 #01 关闭防火墙 systemctl stop firew ...

  10. typora 目录内添加右键

    Typora.reg 这里路径改成自己的 Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\Directory\Background\sh ...