Kaka's Matrix Travels
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的更多相关文章
- POJ 3422 Kaka's Matrix Travels
Kaka's Matrix Travels Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9567 Accepted: ...
- POJ3422 Kaka's Matrix Travels[费用流]
Kaka's Matrix Travels Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9522 Accepted: ...
- poj3422 Kaka's Matrix Travels(最小费用最大流问题)
/* poj3422 Kaka's Matrix Travels 不知道 k次 dp做为什么不对??? 看了大牛的代码,才知道还可以这样做! 开始没有理解将a 和 a‘ 之间建立怎样的两条边,导致程序 ...
- POJ3422 Kaka's Matrix Travels 【费用流】*
POJ3422 Kaka's Matrix Travels Description On an N × N chessboard with a non-negative number in each ...
- POJ 3422 Kaka's Matrix Travels(费用流)
Kaka's Matrix Travels Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6792 Accepted: ...
- POJ3422 Kaka's Matrix Travels
描述 On an N × N chessboard with a non-negative number in each grid, Kaka starts his matrix travels wi ...
- 【poj3422】 Kaka's Matrix Travels
http://poj.org/problem?id=3422 (题目链接) 题意 N*N的方格,每个格子中有一个数,寻找从(1,1)走到(N,N)的K条路径,使得取到的数的和最大. Solution ...
- POJ 3422 Kaka's Matrix Travels 【最小费用最大流】
题意: 卡卡有一个矩阵,从左上角走到右下角,卡卡每次只能向右或者向下.矩阵里边都是不超过1000的正整数,卡卡走过的元素会变成0,问卡卡可以走k次,问卡卡最多能积累多少和. 思路: 最小费用最大流的题 ...
- POJ 3422 Kaka's Matrix Travels (K取方格数:最大费用流)
题意 给出一个n*n大小的矩阵,要求从左上角走到右下角,每次只能向下走或者向右走并取数,某位置取过数之后就只为数值0,现在求解从左上角到右下角走K次的最大值. 思路 经典的费用流模型:K取方格数. 构 ...
- POJ 3422 Kaka's Matrix Travels K取方格数
题目:给出n*n的方格矩阵,现在从左上方走m次到右下方,问m次能够获得的最大价值和. 分析:最大费用流.拆点进行限制每个格子只取一次,假设点x拆成 x,xx,右边(假设有)y,yy,下方(假设有)z, ...
随机推荐
- linux 系统 UDP 丢包问题分析思路
转自:http://cizixs.com/2018/01/13/linux-udp-packet-drop-debug?hmsr=toutiao.io&utm_medium=toutiao.i ...
- css3属性之-webkit-margin-before
当没有对浏览器进行css边距初始化时,在web-kit浏览器上会出现下面的浏览器默认边距设置: ul, menu, dir { display: block; list-style-type: dis ...
- ZOJ - 3987 - Numbers (大数 + 贪心)
参考自:https://blog.csdn.net/u013534123/article/details/78484494 题意: 给出两个数字n,m,把n分成m份,使得以下最小 思路: 或运算只有0 ...
- UVA - 808 Bee Breeding (建立坐标系&找规律)
题目: 输入两个格子的编号a和b(a,b≤10000),求最短距离.例如,19和30的距离为5(一条最短路是19-7-6-5-15-30). 思路: 如图建立坐标系,然后看两个点的向量如果位于二四象限 ...
- 这几道Java集合框架面试题在面试中几乎必问
Arraylist 与 LinkedList 异同 1. 是否保证线程安全: ArrayList 和 LinkedList 都是不同步的,也就是不保证线程安全: 2. 底层数据结构: Arraylis ...
- Linux系统重要的子目录
更多目录知识 http://blog.51cto.com/yangrong/1288072 /etc/fstab 机自动挂载分区/磁盘,规定哪个分区/设备,挂载到哪里 [root@oldboy ~] ...
- Python机器学习入门(1)之导学+无监督学习
Python Scikit-learn *一组简单有效的工具集 *依赖Python的NumPy,SciPy和matplotlib库 *开源 可复用 sklearn库的安装 DOS窗口中输入 pip i ...
- c++行事准则
1.c++包含多种编程范式,每种范式遵循不同的准则: 2.除了#include和#ifdef之流,其他预处理器别用,多用enum和const: 3.函数声明定义多用const:
- Vue2.0 Props双向绑定报错简易处理办法
在写项目的时候遇到了一个报错问题,虽然功能是正常运行,chrome的提示是:[Vue warn]: Avoid mutating a prop directly since the value wil ...
- 什么是js严格模式?
[03] 严格模式 ECMAScript 5 引入了严格模式(strict mode)的概念.严格模式是为JavaScript 定义了一种不同的解析与执行模型.在严格模式下,ECMAScript 3 ...