poj 3422 (费用流)
从左上角到有下角k次能获得的最大值。
跟hdu 2686一样的题目,这题一个点可以重复走,只能得到一次值。
#include<stdio.h>
#include<string.h>
#include<queue>
const int N=5100;
const int inf=0x3fffffff;
using namespace std;
int dist[N],head[N],num,start,end,n,vis[N],pre[N];
struct edge
{
int st,ed,cost,flow,next;
}e[N*10];
void addedge(int x,int y,int c,int w)
{
e[num].st=x;e[num].ed=y;e[num].cost=c; e[num].flow=w;e[num].next=head[x];head[x]=num++;
e[num].st=y;e[num].ed=x;e[num].cost=-c;e[num].flow=0;e[num].next=head[y];head[y]=num++;
}
int SPFA()
{
queue<int>Q;
int i,v,u;
for(i=0;i<=end;i++)
{dist[i]=-1;vis[i]=0;pre[i]=-1;}
dist[start]=0;vis[start]=1;
Q.push(start);
while(!Q.empty())
{
u=Q.front();Q.pop();
vis[u]=0;
for(i=head[u];i!=-1;i=e[i].next)
{
v=e[i].ed;
if(e[i].flow>0&&dist[v]<dist[u]+e[i].cost)
{
dist[v]=dist[u]+e[i].cost;
pre[v]=i;
if(vis[v]==0)
{
Q.push(v);
vis[v]=1;
}
}
}
}
if(pre[end]==-1)
return 0;
return 1;
}
int Maxcost()
{
int i,maxflow=0,minflow,maxcost=0;
while(SPFA())
{
minflow=inf;
for(i=pre[end];i!=-1;i=pre[e[i].st])
if(minflow>e[i].flow)
minflow=e[i].flow;
maxflow+=minflow;
for(i=pre[end];i!=-1;i=pre[e[i].st])
{
e[i].flow-=minflow;
e[i^1].flow+=minflow;
maxcost+=e[i].cost;
}
}
//printf("maxflow=%d\n",maxflow);
return maxcost;
}
int main()
{
int i,j,t,x,w,k;
while(scanf("%d%d",&n,&k)!=-1)
{
t=n*n;start=0;end=t*2+1;num=0;
memset(head,-1,sizeof(head));
addedge(start,1,0,k);
addedge(t+t,end,0,k);
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
scanf("%d",&w);
x=i*n+j-n;
addedge(x,x+t,w,1);
addedge(x,x+t,0,k-1);
if(j+1<=n)
addedge(x+t,x+1,0,k);
if(i+1<=n)
addedge(x+t,x+n,0,k);
}
printf("%d\n",Maxcost());
}
return 0;
}
poj 3422 (费用流)的更多相关文章
- poj 2516 (费用流)
题意:有N个供应商,M个店主,K种物品.每个供应商对每种物品的的供应量已知,每个店主对每种物品的需求量的已知,从不同的供应商运送不同的货物到不同的店主手上需要不同的花费,又已知从供应商m送第k种货物的 ...
- poj 2175 费用流消圈
题意抽象出来就是给了一个费用流的残存网络,判断该方案是不是最优方案,如果不是,还要求给出一个更优方案. 在给定残存网络上检查是否存在负环即可判断是否最优. 沿负环增广一轮即可得到更优方案. 考虑到制作 ...
- Going Home POJ - 2195 费用流板子题
On a grid map there are n little men and n houses. In each unit time, every little man can move one ...
- Going Home POJ - 2195(费用流)
就是一个简单题 四个月前a的一道题,今天又看到了,再a一遍吧. 好吧 我想多了 用了bfs求最短路 其实不用的 因为没有障碍物 #include <iostream> #include ...
- POJ 3422 Kaka's Matrix Travels (最小费用最大流)
POJ 3422 Kaka's Matrix Travels 链接:http://poj.org/problem? id=3422 题意:有一个N*N的方格,每一个方格里面有一个数字.如今卡卡要从左上 ...
- POJ 3422 Kaka's Matrix Travels(费用流)
POJ 3422 Kaka's Matrix Travels 题目链接 题意:一个矩阵.从左上角往右下角走k趟,每次走过数字就变成0,而且获得这个数字,要求走完之后,所获得数字之和最大 思路:有点类似 ...
- POJ 3422 Kaka's Matrix Travels (K取方格数:最大费用流)
题意 给出一个n*n大小的矩阵,要求从左上角走到右下角,每次只能向下走或者向右走并取数,某位置取过数之后就只为数值0,现在求解从左上角到右下角走K次的最大值. 思路 经典的费用流模型:K取方格数. 构 ...
- poj 3422 Kaka's Matrix Travels 费用流
题目链接 给一个n*n的矩阵, 从左上角出发, 走到右下角, 然后在返回左上角,这样算两次. 一共重复k次, 每个格子有值, 问能够取得的最大值是多少, 一个格子的值只能取一次, 取完后变为0. 费用 ...
- [poj] 3422 Kaka's Matrix Travels || 最小费用最大流
原题 给一个N*N的方阵,从[1,1]到[n,n]走K次,走过每个方格加上上面的数,然后这个格上面的数变为0.求可取得的最大的值. 要求最大值,所以把边权全为负跑最小费用即可.因为只有第一次经过该点的 ...
随机推荐
- 狗狗40题~(Volume B)
H - Sorting Slides 应该是个二分匹配的模板题的,但我还不会写 = = 其实数据规模很小,就用贪心的方法就水过了(没加vis判冲突wa了几发,从此开始艰难的没有1A 的生活) #inc ...
- mongo db安装和php,python插件安装
安装mongodb 1.下载,解压mongodb(下载解压目录为/opt) 在/opt目录下执行命令 wget fastdl.mongodb.org/linux/mongodb-linux-x86_6 ...
- saiku
1.saiku下载http://community.meteorite.bi/可以下载各个版本的源代码 2.下载到 saiku-latest.zip 3.解压运行比较简单 解压出来的目录: ...
- Linux 系统命令及其使用详解(大全)
(来源: 中国系统分析员) cat cd chmod chown cp cut 1.名称:cat 使用权限:所有使用者 使用方式:cat [-AbeEnstTuv] [--help] [--versi ...
- js操作Cookie,实现历史浏览记录
/** * history_teacher.jsp中的js,最近浏览名师 * @version: 1.0 * @author: mingming */ $(function(){ getHistory ...
- js+dom开发第十六天
一.css常用标签及页面布局 1.常用标签 position(定位) z-index(定位多层顺序) background(背景) text-align(针对字符自动左右居中) margin(外边距) ...
- 枚举宏(Adopting Modern Objective-C)
使用NS_ENUM 和 NS_OPTIONS宏定义枚举.Adopting Modern Objective-C 使用NS_ENUM宏定义一组互斥的枚举值: typedef NS_ENUM(NSInte ...
- 【转】Spring注解详解
http://blog.csdn.net/xyh820/article/details/7303330/ 概述 注释配置相对于 XML 配置具有很多的优势: 它可以充分利用 Java 的反射机制获取类 ...
- cf C On Number of Decompositions into Multipliers
题意:给你n个数,然后把这个n个数的乘积化成n个数相乘,可以化成多少个. 思路:分解质因数,求出每一个质因子的个数,然后用组合数学中隔板法把这些质因子分成n分,答案就是所有质因子划分成n份的情况的乘积 ...
- java 修饰符的作用一(public protected default private 组)
1.public protected default private 组 public 权限最大,同类,同包,不同包,同包子类父类之间,不同包子类父类之间都可以访问. java 默认的权限是defau ...