如果不允许转化'#'和'.'的话,那么可以直接在'#'和'.'之间连容量为b的边,把所有'#'和一个源点连接,

所有'.'和一个汇点连接,流量不限,那么割就是建围栏(分割'#'和'.')的花费。

问题是'#'和'.'是可以转化的,由刚才的思路,可以联想到,当'#'可以转化成'.'的时候,那么就不需要在它和周围的'.'之间建围栏,

那么可以限制源点到'#'的容量为d,表示最多花费为d,对称地,限制'.'到汇点T容量为f。

然后跑最大流最小割就好了。

这题思路好神啊。。。仔细体会容量表示最多花费和最小割的关系

#include<bits/stdc++.h>
using namespace std;struct Edge
{int v,cap,nxt;
};
const int maxv = 2502+6;
vector<Edge> edges;
#define PB push_back
int head[maxv],cur[maxv];void AddEdge(int u,int v,int c)
{edges.PB({v,c,head[u]});head[u] = edges.size()-1;edges.PB({u,0,head[v]});head[v] = edges.size()-1;
}int S = 0,T = 1;
int lv[maxv];
bool vis[maxv];
int q[maxv];bool bfs()
{memset(vis,0,sizeof(vis));int l = 0, r = 0;lv[S] = 0; q[r++] = S; vis[S] = true;while(r>l){int u = q[l++];for(int i = head[u]; ~i; i = edges[i].nxt){Edge &e = edges[i];if(!vis[e.v] && e.cap){lv[e.v] = lv[u]+1; vis[e.v] = true;q[r++] = e.v;}}}return vis[T];
}int dfs(int u,int a)
{if(u == T||!a) return a;int flow = 0,f;for(int  &i = cur[u]; ~i; i = edges[i].nxt){Edge &e = edges[i];if(lv[e.v] == lv[u]+1 && (f = dfs(e.v,min(a,e.cap)))){flow += f;e.cap -= f;edges[i^1].cap += f;a -= f;if(!a) break;}}return flow;
}const int INF = 0x3f3f3f3f;
int MaxFlow()
{int flow = 0;while(bfs()){memcpy(cur,head,sizeof(head));flow += dfs(S,INF);}return flow;
}const int N = 50;
char g[N][N+2];
int id[N][N];
int h,w;
int d,f,b;int ID(int i,int j) { return i*w+j+2; }void init()
{scanf("%d%d%d%d%d",&w,&h,&d,&f,&b);edges.clear();for(int i = 0; i < h; i++){scanf("%s",g[i]);for(int j = 0; j < w; j++){id[i][j] = ID(i,j);}}memset(head,-1,sizeof(head));
}
int dx[] = {0,0,1,-1};
int dy[] = {1,-1,0,0};int main()
{//freopen("in.txt","r",stdin);int TestCase; scanf("%d",&TestCase);while(TestCase--){init();int cost = 0;for(int i = 0; i < h; i++){for(int j = 0; j < w; j++){if(i == 0 || i == h-1 || j == 0|| j == w-1){if(g[i][j] == '.') cost += f;AddEdge(S,id[i][j],INF);}else {if(g[i][j] == '#') AddEdge(S,id[i][j],d);else AddEdge(id[i][j],T,f);}for(int k = 0; k < 4; k++){int ni = i+dx[k], nj = j+dy[k];if(ni<0||ni>=h||nj<0||nj>=w) continue;AddEdge(id[i][j],id[ni][nj],b);}}}printf("%d\n",cost+MaxFlow());}return 0;
}

转载于:https://www.cnblogs.com/jerryRey/p/4761919.html

UVA1515 Pool construction (最小割模型)相关推荐

  1. hdu 3879(最小割模型求解最大权闭合图)

    题意: 公司得到了一共N个可以作为通讯信号中转站的地址,而由于这些地址的地理位置差异,在不同的地方建造通讯中转站需要投入的成本也是不一样的,所幸在前期调查之后这些都是已知数据:建立第i个通讯中转站需要 ...

  2. AcWing2279 网络战争 (01分数规划+网络流 最小割模型)

    原题链接:AcWing2279 网络战争 题目大意 给一个无向带权图,求将s和t分开的一个边割集,使得割集的平均边权最小,即最小化∑e∈cwe∣c∣\frac{\sum_{e\in c} w_e}{| ...

  3. UVA-1515 Pool construction (最小割)

    题目大意:有一块地,分成nxm块.有的块上长着草,有的块上是荒地.将任何一块长着草的块上的草拔掉都需要花费d个力气,往任何一块荒地上种上草都需要花费f个力气,在草和荒地之间架一个篱笆需要花费b个力气, ...

  4. Pool construction UVA - 1515 最小割模型

    传送门 文章目录 题意: 思路: 题意: 给你一个n∗mn*mn∗m的矩阵,包含字符#和.,将#变成.的代价是ddd,将.变成#的代价是fff,让后将#和.隔开的代价是bbb,现在让你用最小的代价将# ...

  5. 最大权闭合子图(最小割模型)

    1,定义: 1,最大权闭合子图是最小割的一个模型.即每一个子图中的每一个点,其出边的点也全应该在这个子图中.而所有子图中,其点的权值和最大就是最大权闭合子图. 2,构建该图,我们把所有正权值点与源点s ...

  6. POJ 3469 Dual Core CPU(最小割模型的建立)

    分析: 这类问题的一遍描述,把一些对象分成两组,划分有一些代价,问最小代价.一般性的思路是, 把这两组看成是S点和T点,把划分的代价和割边的容量对应起来求最小割. 把S和可模版tem之间到达关系看作是 ...

  7. 【图论】【网络流】最小割模型

    最小割 最小割应用--01规划问题 最优标号 网络战争 最大权闭合图 最大获利 最大密度子图 生活的艰辛 二分图之最小点权覆盖集 有向图破坏 二分图之最大点权独立集 王者之剑 建图实战 有线电视网络 ...

  8. 最小割 ---- 2021 ccpc 威海 H city-safety(最大利润 = 最大收益 - 最小花费(最小割))

    题目链接 题目大意: 一棵树,加强第 iii 个点有 wiw_iwi​ 的花费,而如果距离某 个点 ≤p≤ p≤p 的所有点都加强了,则会有 vpv_pvp​ 的收益,求最大净收益. 解题思路: 树形 ...

  9. BZOJ 2132 圈地计划(最小割)【BZOJ 修复工程】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 题目链接 https://hydro.ac/d/bzoj/p/2132 是 hydro 的 BZOJ ...

  10. 【网络流24题】B、太空飞行计划问题(最大权闭合图转最小割、最小割方案输出)

    整理的算法模板合集: ACM模板 B.太空飞行计划问题(最大权闭合图转最小割.最小割方案输出)[省选/NOI- ] P2762 太空飞行计划问题 [问题分析] 最大权闭合图问题,可以转化成最小割问题, ...

最新文章

  1. ubuntu 14.10 使用fcitx输入法
  2. foundation of the academics
  3. 大白话5分钟带你走进人工智能-第二十六节决策树系列之Cart回归树及其参数(5)...
  4. html中after对应的样式怎么写,css – 如何创建内联样式:before和:after
  5. leetcode614. 二级关注者(SQL)
  6. vue实现搜索框记录搜索历史_云开发版的微信商城小程序第四章,首页自定义搜索框的实现...
  7. Mac下和Windows下UnrealEngine 4体验对比
  8. 再获数千万融资,湃方科技将工业智联革命进行到底
  9. 为什么我们选择 Flutter 开发移动应用?
  10. Opencv Camshift对象跟踪
  11. 一句话说明sync, fsync, fdatasync的区别
  12. Fspecial函数用法
  13. 物联网云平台的远程管理
  14. 洛谷P2466 [SDOI2008] Sue 的小球 题解
  15. 毛球科技论述区块链之符号理论(上)
  16. VMware虚拟机与windows主机之间相互复制粘贴
  17. 树莓派智能家居项目整合(包含语音、socket、火灾、摄像头线程)
  18. Vulkan_Shader_Day01—光照(物体颜色)
  19. r语言 网站数据查找
  20. 获取token的两种方法

热门文章

  1. 聊聊工作与生活的平衡
  2. DOM(一):节点层次-Node类型
  3. not1,not2,bind1st,bind2nd
  4. 提升网络销售转化率的10种方法
  5. 《Don't make me think 》关于Web可用性的三大定律
  6. iPhone 和 华为手机 :手机端酷狗音乐提示 “导入歌曲不支持此操作” ----曲线解决导入问题
  7. 牛客多校第三场J LRU management(双向链表)题解
  8. 2019牛客多校第一场I Points Division(DP)题解
  9. Fabric1.4源码解析:客户端创建通道过程
  10. angular 个人零点学习