BZOJ4439——[Swerc2015]Landscaping
#include <queue> #include <cstdio> #include <cstdlib> #include <cstring> #include <algorithm> using namespace std; #define M 100010 #define inf 1014748364 inline int read(){ char ch = getchar(); int x = 0, f = 1; while(ch < '0' || ch > '9'){ if(ch == '-') f = -1; ch = getchar(); } while('0' <= ch && ch <= '9'){ x = x * 10 + ch - '0'; ch = getchar(); } return x * f; } namespace dinic{ struct Edge{ int from, to, cap, flow, next; } G[M]; int head[M], cur[M], tot; int vis[M], d[M]; int s, t; inline void init(){ memset(head, -1, sizeof(head)); tot = -1; } inline void add(int u, int v, int w){ G[++ tot] = (Edge){u, v, w, 0, head[u]}; head[u] = tot; G[++ tot] = (Edge){v, u, 0, 0, head[v]}; head[v] = tot; } inline bool BFS(){ memset(vis, 0, sizeof(vis)); vis[s] = 1; d[s] = 0; queue<int> Q; Q.push(s); while(!Q.empty()){ int x = Q.front(); Q.pop(); for(int i = head[x]; i != -1; i = G[i].next){ Edge& e = G[i]; if(!vis[e.to] && e.cap > e.flow){ Q.push(e.to); vis[e.to] = 1; d[e.to] = d[x] + 1; } } } return vis[t]; } inline int DFS(int x, int a){ if(x == t || a == 0) return a; int flow = 0, f; for(int& i = cur[x]; i != -1; i = G[i].next){ Edge& e = G[i]; if(d[e.to] == d[x] + 1 && (f = DFS(e.to, min(a, e.cap - e.flow))) > 0){ e.flow += f; G[i ^ 1].flow -= f; flow += f; a -= f; if(a == 0) break; } } return flow; } inline int maxflow(){ int flow = 0; while(BFS()){ for(int i = s; i <= t; i ++) cur[i] = head[i]; flow += DFS(s, inf); } return flow; } } char str[60][60]; int num[60][60]; int cnt; int dx[] = {0, 1, -1, 0}; int dy[] = {1, 0, 0, -1}; int n, m, A, B; inline bool is_(int x, int y){ return x < 1 || y < 1 || x > n || y > m; } int main(){ n = read(), m = read(), A = read(), B = read(); for(int i = 1; i <= n; i ++) scanf("%s", str[i] + 1); for(int i = 1; i <= n; i ++){ for(int j = 1; j <= m; j ++){ num[i][j] = ++ cnt; } } dinic::init(); dinic::s = 0; dinic::t = n * m + 1; for(int i = 1; i <= n; i ++){ for(int j = 1; j <= m; j ++){ if(str[i][j] == '.') dinic::add(0, num[i][j], B); else dinic::add(num[i][j], n * m + 1, B); for(int k = 0; k < 4; k ++){ int tx = i + dx[k], ty = j + dy[k]; if(is_(tx, ty)) continue; dinic::add(num[i][j], num[tx][ty], A); } } } printf("%d\n", dinic::maxflow()); return 0; }
BZOJ4439——[Swerc2015]Landscaping的更多相关文章
- 【BZOJ4439】[Swerc2015]Landscaping 最小割
[BZOJ4439][Swerc2015]Landscaping Description FJ有一块N*M的矩形田地,有两种地形高地(用‘#’表示)和低地(用‘.’表示) FJ需要对每一行田地从左到右 ...
- bzoj 4439: [Swerc2015]Landscaping -- 最小割
4439: [Swerc2015]Landscaping Time Limit: 2 Sec Memory Limit: 512 MB Description FJ有一块N*M的矩形田地,有两种地形 ...
- 【bzoj4439】[Swerc2015]Landscaping 网络流最小割
题目描述 FJ有一块N*M的矩形田地,有两种地形高地(用‘#’表示)和低地(用‘.’表示) FJ需要对每一行田地从左到右完整开收割机走到头,再对每一列从上到下完整走到头,如下图所示 对于一个4*4的田 ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- BZOJ_4439_[Swerc2015]Landscaping_最小割
BZOJ_4439_[Swerc2015]Landscaping_最小割 Description FJ有一块N*M的矩形田地,有两种地形高地(用‘#’表示)和低地(用‘.’表示) FJ需要对每一行田地 ...
- 解决Error creating bean with name 'huayuanjingguanDaoimp' defined in file [D:\apache-tomcat-7.0.52\webapps\landscapings\WEB-INF\classes\com\itheima\landscaping\dao\imp\huayuanjingguanDaoimp.class]: Invo
问题描述: 10:23:13,585 ERROR ContextLoader:307 - Context initialization failedorg.springframework.beans. ...
- Landscaping Gym - 101128F (网络流)
Problem F: Landscaping \[ Time Limit: 1 s \quad Memory Limit: 256 MiB \] 题意 题意是给出一个\(n*m\)的格子,其中一些是低 ...
- POJ 2433 Landscaping (贪心)
题意:给定一个序列表示一群山,要你保留最多 K 个山峰,最少要削去多少体积和土.一个山峰是指一段连续的相等的区间,并且左边和右边只能比这个区间低,或者是边界. 析:贪心,每次都寻找体积最小的山峰,然后 ...
- LA 7277 Landscaping(最小割)
https://vjudge.net/problem/UVALive-7277 题意: 给出一个n*m的地图,.代表低坡,#代表高坡. 现在有n+m辆车分别从上端和左端出发,如果在行驶的过程中需要转换 ...
随机推荐
- python chinese code
http://blog.csdn.net/inte_sleeper/article/details/6676351 编码的历史 1. ASCII ASCII(American Standard ...
- glade2支持C++代码的输出(2)
今天更新了一个BaseObject的代码:BaseObject.002.zip 同时将glade2生成C++代码的代码进行了调整,基于2.12.2的补丁为:cpp_out_2.patch.tar.xz ...
- elasticsearch api
count curl -XGET http://21.3.5.121:9200/ipv4geo/service/_count -d '{"query":{"match&q ...
- 提取hdfs文件名的方法
#!/bin/bash #------------------------------------------------------------- # 把目录中的所有文件getmerge到本地 # ...
- c++异常捕获
概念: “C++异常”就是 try{}catch(...){} “SEH异常”就是 __try{} __except(-//){} (关于这两种异常,如有不了解的地方,网上有很多资料可以参考) 目前微 ...
- Java——URLEncoder和URLDecoder
import java.net.URLDecoder; import java.net.URLEncoder; //========================================== ...
- DIOCP 运作核心探密
来自网友天地弦的DIOCP早已经广为人知了,有很多的同学都用上了它,甚至各种变异.修改版本也出了不少.我最近也在学习DIOCP,打算将它用于自己的服务端,今天让我们来一起探密它(DIOCP)的运作核心 ...
- sqlmap注入技巧收集
收集了一些利用Sqlmap做注入测试的TIPS,其中也包含一点绕WAF的技巧,便于大家集中查阅,欢迎接楼补充.分享. TIP1 当我们注射的时候,判断注入 http://site/script?id= ...
- jquery.validate 的ajax验证(转)
在做网站的时候有一块需要用到jquery.validate插件 ajax方式的方式来验证原始密码是否正确,研究了研究加上博客园朋友的帮助,终于实现了.贴出代码 <script type=&quo ...
- CSS3导航效果
来自codepen http://codepen.io/mouradhamoud/pen/RRvVZp <!DOCTYPE html> <html> <head> ...