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. xcode initWithCoder\awakeFromNib\layoutSubviews

    控件通过xib,storyboard创建,初始化设置一定会调用initWithCoder awakeFromNib 加载完毕的时候肯定会调用 layoutSubviews 布局子控件 位置和尺寸 利用 ...

  2. SQL(Oracle)日常使用与不常使用函数的汇总

    --日常使用的sql语句和oracle语句,有些相对使用的频率比较高,收藏起来还是比较值得的 -- 绝对值 SQL:) value Oracle:) value from dual -- 2.取整(大 ...

  3. iOS开发笔记 基于wsdl2objc调用asp.net WebService

    1.准备 先下载待会要用到的工具 WSDL2ObjC-0.6.zip WSDL2ObjC-0.7-pre1.zip 我用的是WSDL2ObjC-0.6.zip 1.1搭建asp.net WebServ ...

  4. ReportViewer动态加载数据源

    ReportViewer主要用于打印和导出数据到pdf或excel,接下来将简单做一张Northwind的Products表的统计报表. (最终图) 一.新建一张报表 二.添加数据集 添加xsd文件后 ...

  5. iOS 7 标签栏控制器进行模态视图跳转后变成透明

    要解决此问题,需要设置tabBar的如下属性: self.tabBar.translucent = NO;

  6. 零行代码为App添加异常加载占位图

    前文提要 近期准备重构项目,需要重写一些通用模块,正巧需要设置App异常加载占位图的问题,心血来潮设想是否可以零行代码解决此问题,特在此分享实现思路. 思路分享 对于App占位图,通常需要考虑的控件有 ...

  7. untiy 播放视频

    利用 MovieTexture 类 放入视频 视频不能使flv的 建立一个平面 作为屏幕,利用Material 播放动画,剩下的就是将平面放大和屏幕一样/ public MovieTexture My ...

  8. C++对象模型3--无重写的单继承

    C++对象模型中加入单继承 不管是单继承.多继承,还是虚继承,如果基于“简单对象模型”,每一个基类都可以被派生类中的一个slot指出,该slot内包含基类对象的地址.这个机制的主要缺点是,因为间接性而 ...

  9. servlet三种实现方式之二继承GenericServlet开发

    servlet有三种实现方式: 1.实现servlet接口 2.继承GenericServlet 3.通过继承HttpServlet开发servlet 第二种示例代码如下(已去掉包名): //这是第二 ...

  10. 同时安装VS2010,VS2012

    >LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏用vs2010打开工程,同时电脑上安装了高版本的VS,vs2012(vs2013)时会出现这 ...