1324: Exca王者之剑

Description

Input

第一行给出数字N,M代表行列数.N,M均小于等于100 下面N行M列用于描述数字矩阵

Output

输出最多可以拿到多少块宝石

Sample Input

2 2

1 2
2 1

Sample Output

4

——分割线——

这道题是一个最小割的模型。

代码:

#include<cstdio>
#include<cstring>
#include<queue>
using namespace std; inline int remin(int a,int b){
if (a<b) return a;
return b;
}
const int inf=214748360; const int Maxm=100000;
struct EdgeNode{
int u;
int v;
int f;
int nxt;
EdgeNode(){}
EdgeNode(int a,int b,int c,int d){
u=a;
v=b;
f=c;
nxt=d;
}
};
int nume=1;
EdgeNode e[Maxm+5]; const int Maxn=10000;
int src,sink;
int g[Maxn+7]; inline void insertEdgeFunction(int u,int v,int f){
e[++nume]=EdgeNode(u,v,f,g[u]);
g[u]=nume;
}
inline void insert(int u,int v,int f){
insertEdgeFunction(u,v,f);
insertEdgeFunction(v,u,0);
} queue<int> que;
int dist[Maxn+5];
inline bool Bfs(){
while(!que.empty()) que.pop();
memset(dist,-1,sizeof(dist));
que.push(src);
dist[src]=0;
while(!que.empty()){
int point=que.front();
que.pop();
for(int i=g[point];i;i=e[i].nxt){
if (e[i].f!=0 && dist[e[i].v]==-1){
que.push(e[i].v);
dist[e[i].v]=dist[point]+1;
}
}
}
return dist[sink]!=-1;
} int Dfs(int p,int delta){
int ret=0;
if (p==sink){
return delta;
}else{
for (int i=g[p];i;i=e[i].nxt){
if (dist[e[i].v]==dist[p]+1 && e[i].f!=0){
int dret=Dfs(e[i].v,remin(e[i].f,delta));
//printf("%d\n",dret);
ret+=dret;
e[i].f-=dret;
e[i^1].f+=dret;
delta-=dret;
}
}
}
return ret;
} inline int Dinic(){
int ret=0;
while(Bfs()){
ret+=Dfs(src,inf);
}
return ret;
} int n,m;
int sum=0;
int map[105][105];
int hash[105][105];
int cnt=0;
int main(){
scanf("%d%d",&n,&m);
for (int i=1;i<=n;i++){
for (int j=1;j<=m;j++){
scanf("%d",&map[i][j]);
sum+=map[i][j];
hash[i][j]=++cnt;
}
}
src=0;
sink=cnt+1;
for(int i=1;i<=n;i++){
for (int j=1;j<=m;j++){
if ((i+j+1)&1){
insert(src,hash[i][j],map[i][j]);
}else{
insert(hash[i][j],sink,map[i][j]);
}
if ((i+j+1)&1){
int dx[]={0,1,0,-1,0};
int dy[]={0,0,1,0,-1};
for (int k=1;k<=4;k++){
int x=i+dx[k],y=j+dy[k];
if (1<=x && x<=n && 1<=y && y<=m) insert(hash[i][j],hash[x][y],inf);
}
}
}
} printf("%d\n",sum-Dinic()); return 0;
}

BZOJ 1324: Exca王者之剑的更多相关文章

  1. bzoj 1324 Exca王者之剑(黑白染色,最小割)

    [题意] 两相邻点不能同时选,选一个点集使得权值和最大. 出题人语文好... [思路] 将图进行黑白二染色,然后构建最小割模型. [代码] #include<set> #include&l ...

  2. BZOJ 1324 Exca 神剑 最小割

    标题效果:鉴于加权值矩阵,带走一个地方的权利值之后,与其相邻的格儿童权利值变0.问多少可以取出到右值. 思维:Amber论文题目.不难建设,图着色.颜色从S连边,还有一种颜色向T连边.再把相邻的格子连 ...

  3. BZOJ 1324 Exca神剑 最小割

    标题效果:给定一个n*m矩阵.所有的格宝石之子,人们可选择起始位置,后除去宝石的当前位置的周围消失,然后你就可以走两步,重复上述过程 easy发现格儿子把它周围格孩子不能拿 因此,党格访问问题 黑白染 ...

  4. 【BZOJ-1324】Exca王者之剑 最小割

    1324: Exca王者之剑 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 483  Solved: 248[Submit][Status][Disc ...

  5. BZOJ1324: Exca王者之剑

    1324: Exca王者之剑 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 256  Solved: 131[Submit][Status] Desc ...

  6. 【BZOJ】【1324】王者之剑

    网络流/二分图最大点权独立集 Amber(胡伯涛)论文<最小割模型在信息学竞赛中的应用>中的例题…… 感觉这个好神啊,果然是一切皆为网络流……这转化太神奇了 /************** ...

  7. [bzoj1324]Exca王者之剑_最小割

    Exca王者之剑 bzoj-1324 题目大意:题目链接. 注释:略. 想法: 最小割经典模型. 所有格子向源点连权值为格子权值的边. 将棋盘黑白染色后白点反转源汇. 如果两个格子相邻那么黑点向白点连 ...

  8. 【bzoj1324】Exca王者之剑(8-9 方格取数问题)

    *题目描述: 在一个有m*n (m,n<=100)个方格的棋盘中,每个方格中有一个正整数.现要从方格中取数,使任意2 个数所在方格没有公共边,且取出的数的总和最大.试设计一个满足要求的取数算法, ...

  9. 【Richard 的刷(水)题记录】

    大概想了想,还是有个记录比较好. 9/24 网络流一日游: 最大流:bzoj1711[Usaco2007 Open]Dining 拆点 BZOJ 3993 Sdoi2015 星际战争 二分 P.S.这 ...

随机推荐

  1. vs2010 项目编译 ResGen.exe”已退出,代码为 -1073741701

    解决的办法如下: 1.关闭所有Visual Studio: 2.以管理员的身份打开命令提示窗口:(开始-运行-cmd) 3.更改目录至"CD C:\Program Files (x86)\M ...

  2. 10条影响CSS渲染速度的写法与建议

    1.*{} #zishu *{} 尽量避开由于不同浏览器对HTML标签的解释有差异,所以最终的网页效果在不同的浏览器中可能是不一样的,为了消除这方面的风险,设计者通常会在CSS的一个始就把所有标签的默 ...

  3. asp.net 连接access数据库方法

    在 Web.Config 中配置 Access 数据库驱动和数据库文件名称. 请看代码 <appSettings> <add key="DBDriver" val ...

  4. iOS 发布应用时屏蔽NSLog

    在开发过程中,经常需要使用NSLog来进行调试,但是NSLog是非常影响性能的,所以我们应该在发布应用时屏蔽掉NSLog,但是如果通过手工的去一行一行的改得话,未免太枯燥与费时了,庆幸的是,我们可以通 ...

  5. 面试题之java 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 要求不能出现截半的情况

    题目:10. 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串. 但是要保证汉字不被截半个,如"我ABC"4,应该截为"我AB",输 ...

  6. FPGA工程中用C语言对文件进行处理_生成mif文件

    本博客中有用verilog处理文件数据的代码,本博文采用C 处理文件中的数据. 有时候要生成一个mif文件—— altera memory  initial file.本次工程中我得到的是一个大型的数 ...

  7. C 根据行来读取文件 字符串的截取

    // TestCFile.cpp : Defines the entry point for the console application. // #include "stdafx.h&q ...

  8. BootStrap学习1 输入提示

    首先参考这个页面http://www.bootcss.com/javascript.html#typeahead 我只是把里面最基本的东西抠出来了 <!DOCTYPE html> < ...

  9. oracle复制表数据,复制表结构

    1.不同用户之间的表数据复制 2.同用户表之间的数据复制 3.B.x中个别字段转移到B.y的相同字段 4.只复制表结构 加入了一个永远不可能成立的条件1=2,则此时表示的是只复制表结构,但是不复制表内 ...

  10. Protel99 SE快捷键大全

    为了方便观看我们的protel99 se视频教程的朋友,我们在这里发布了protel99 se的所有的键盘的快捷分健大全,希望大家在学习我们的视频教程的时候,可以熟悉以下这些快捷键,因为平时我们用pr ...