http://poj.org/problem?id=3422

 #include <stdio.h>
#include <algorithm>
#include <string.h>
#include <queue>
using namespace std;
const int INF = <<;
const int N=;
int Map[][],dis[N];
int head[N],pre[N];
bool vis[N];
int cnt = ;
int ans = ;
int n;
struct node
{
int u,v,c,f;
int next; } edge[N];
void add(int u,int v,int c,int f)
{
edge[cnt].u = u;
edge[cnt].v = v;
edge[cnt].c = c;
edge[cnt].f = f;
edge[cnt].next = head[u];
head[u] = cnt++;
edge[cnt].u = v;
edge[cnt].v = u;
edge[cnt].c = -c;
edge[cnt].f = ;
edge[cnt].next = head[v];
head[v] = cnt++;
}
int spfa()
{
for (int i = ; i <= n*n*+; i++)
{
dis[i] = INF;
pre[i] = -;
vis[i] = false;
}
dis[n*n*] = ;
queue<int>q;
q.push(n*n*);
vis[n*n*] = true;
while(!q.empty())
{
int u = q.front();
vis[u] = false;
q.pop();
for (int j = head[u]; j!=-; j=edge[j].next)
{
if (edge[j].f > &&dis[edge[j].v] > dis[u]+ edge[j].c)
{
pre[edge[j].v] = j;
dis[edge[j].v] = dis[u]+ edge[j].c;
if (!vis[edge[j].v])
{
q.push(edge[j].v);
vis[edge[j].v] = true;
}
}
}
}
if (pre[n*n*+]==-)
return ;
return ;
}
void MCMF()
{
while(spfa())
{
int Minflow = INF;
int j = pre[n*n*+];
while(j!=-)
{
Minflow = min(Minflow,edge[j].f);
j = pre[edge[j].u];
}
j = pre[n*n*+];
while(j!=-)
{
edge[j].f-=Minflow;
edge[j^].f+=Minflow;
ans+=Minflow*edge[j].c;
j = pre[edge[j].u];
}
}
}
int main()
{
int k;
scanf("%d%d",&n,&k);
memset(Map,,sizeof(Map));
memset(head,-,sizeof(head));
for (int i = ; i <= n; i++)
{
for (int j = ; j <= n; j++)
{
scanf("%d",&Map[i][j]);
}
}
for (int i = ; i <= n; i++)//拆点
{
for (int j = ; j <= n; j++)
{
int u = (i-)*n+j-;
add(*u,*u+,-Map[i][j],);//加边
add(*u,*u+,,k-);
}
}
for (int i = ; i <= n; i++)//向右加边
{
for (int j = ; j < n; j++)
{
int u = (i-)*n+j-;
add(*u+,(u+)*,,k);
}
}
for (int i = ; i < n; i++)//向下加边
{
for (int j = ; j <= n; j++)
{
int u = (i-)*n+j-;
add(*u+,(u+n)*,,k);
}
}
add(n*n*,,,k);//加源点
add(n*n*-,n*n*+,,k);//加终点
MCMF();
printf("%d\n",-ans);
return ;
}

Kaka's Matrix Travels的更多相关文章

  1. POJ 3422 Kaka's Matrix Travels

    Kaka's Matrix Travels Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9567   Accepted:  ...

  2. POJ3422 Kaka's Matrix Travels[费用流]

    Kaka's Matrix Travels Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9522   Accepted:  ...

  3. poj3422 Kaka's Matrix Travels(最小费用最大流问题)

    /* poj3422 Kaka's Matrix Travels 不知道 k次 dp做为什么不对??? 看了大牛的代码,才知道还可以这样做! 开始没有理解将a 和 a‘ 之间建立怎样的两条边,导致程序 ...

  4. POJ3422 Kaka's Matrix Travels 【费用流】*

    POJ3422 Kaka's Matrix Travels Description On an N × N chessboard with a non-negative number in each ...

  5. POJ 3422 Kaka's Matrix Travels(费用流)

    Kaka's Matrix Travels Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6792   Accepted:  ...

  6. POJ3422 Kaka's Matrix Travels

    描述 On an N × N chessboard with a non-negative number in each grid, Kaka starts his matrix travels wi ...

  7. 【poj3422】 Kaka's Matrix Travels

    http://poj.org/problem?id=3422 (题目链接) 题意 N*N的方格,每个格子中有一个数,寻找从(1,1)走到(N,N)的K条路径,使得取到的数的和最大. Solution ...

  8. POJ 3422 Kaka's Matrix Travels 【最小费用最大流】

    题意: 卡卡有一个矩阵,从左上角走到右下角,卡卡每次只能向右或者向下.矩阵里边都是不超过1000的正整数,卡卡走过的元素会变成0,问卡卡可以走k次,问卡卡最多能积累多少和. 思路: 最小费用最大流的题 ...

  9. POJ 3422 Kaka's Matrix Travels (K取方格数:最大费用流)

    题意 给出一个n*n大小的矩阵,要求从左上角走到右下角,每次只能向下走或者向右走并取数,某位置取过数之后就只为数值0,现在求解从左上角到右下角走K次的最大值. 思路 经典的费用流模型:K取方格数. 构 ...

  10. POJ 3422 Kaka's Matrix Travels K取方格数

    题目:给出n*n的方格矩阵,现在从左上方走m次到右下方,问m次能够获得的最大价值和. 分析:最大费用流.拆点进行限制每个格子只取一次,假设点x拆成 x,xx,右边(假设有)y,yy,下方(假设有)z, ...

随机推荐

  1. bzoj2693 jzptab 莫比乌斯反演|题解

    Description   Input 一个正整数T表示数据组数 接下来T行 每行两个正整数 表示N.M Output T行 每行一个整数 表示第i组数据的结果 Sample Input 1 4 5 ...

  2. Ubuntu下安装oh-my-zsh

    本文参考 https://www.jianshu.com/p/9a5c4cb0452d 此文已在ubuntu下确实安装成功,只不过懒得截图了,可以参照上述地址,我在他原基础上进行了一些更改. 安装Oh ...

  3. Flask蓝图基本使用

    Flask蓝图基本使用 Flask通过使用蓝图将视图函数模块化,使应用显得更加规整 比如我们的应用的视图函数包括用户相关和文章相关,那么我们可以通过建立两个py文件分别存储两类视图函数 user.py ...

  4. 【Codeforces 264B】Good Sequences

    [链接] 我是链接,点我呀:) [题意] 让你在一个递增数组中选择一个最长子序列使得gcd(a[i],a[i+1])>1 [题解] 设f[i]表示以一个"含有素因子i的数字" ...

  5. 重载与重写的区别----https://blog.csdn.net/zhu_apollo/article/details/1852542

    重载 overloading        1) 方法重载是让类以统一的方式处理不同类型数据的一种手段.多个同名函数同时存在,具有不同的参数个数/类型.重载是一个类中多态性的一种表现.        ...

  6. ECMAScript 6 入门学习笔记(零)——开始

    所有es6笔记都是我自己提出来的一些点,没有很详细的例子什么的,这个链接就是我看的教程,有需要的可以看看.(http://es6.ruanyifeng.com/#docs/intro) 1.ECMAS ...

  7. P1009 阶乘之和 洛谷

    https://www.luogu.org/problem/show?pid=1009 题目描述 用高精度计算出S=1!+2!+3!+…+n!(n≤50) 其中“!”表示阶乘,例如:5!=54321. ...

  8. MyBatis 3判断不为null

    <if test="type!=null and type!=''"> AND type = #{type} </if>

  9. Android GIS开发系列-- 入门季(1) 起点

    前言 这个系列,待最终完成更新,大家体谅点,第一版本全部是参考的网络教程,最近会逐步的细化更新为可以直接使用的情况. 本系列的开发基于AS (  Android Studio ), 和ArcGIS 的 ...

  10. JConsole使用手冊具体解释

    一篇Sun项目主页上介绍JConsole使用的文章,前段时间性能測试的时候大概翻译了一下以便学习,今天整理一下发上来.有些地方也不知道怎么翻,就保留了原文,可能还好理解点.呵呵,水平有限,翻的不好,大 ...