poj 3422:Kaka's Matrix Travels(最小费用最大流)

POJ3422 Kaka's Matrix Travels 【费用流】* POJ3422 Kaka’s Matrix Travels Description On an N × N chessboard with a non-negative number in each grid, Kaka starts his matrix travels with SUM = 0. For each travel, Kaka moves one rook from t... 阅读详情
大致题意:
给出N和K,表示一个N*N个区域组成的的方阵map,方阵的每个区域都有自己的一个值map[i][j]。现从(0,0)点走到(n,n)点走K次,规定只能向右走或者向下走,每经过一个区域取走区域中的值,map[i][j]变为0,一个区域可以被多次经过。求最多能取走多少值。

大致思路:
    最小费用最大流。说实话一直觉得这道题算法叫最大费用最大流更合适,因为这里求的是取走费用总和的最大值。但是终归还是要用费用流的模版,毕竟只是最小费用流模版改了几个小地方而已。
    建图方案。因为这里并不规定一个区域最多走多少次,但是能获得其上面数字map[i][j]的次数只有一次,所以这里可以将一个点拆作两个点再用两条边连接他们。一条的流量是1费用是map[i][j],代表能得到收入map[i][j]的次数只有一次。另一条流量是inf费用是0,代表这个点可以被0收入地经过无数次。再将其拆出的第二个点与其下方和右方的点连上一条边,流量为inf费用为0。设一个超级原点0连接1,这条边流量是K,费用是0。然后对构造出的图从0到第2*N*N个点使用最小费用最大流模版。
    说到模版,本来想带poj 2135的模版来用,没想到tle了,最后看大牛的博客说在用spfa时使用堆栈会超时,换队列的spfa模版过了。哪位大牛知道这是为何的话麻烦帮忙给我解释解释啊。

详细代码:
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
const int inf=99999999;
const int nMax=5005;
struct{
    int v, cap, cost, next, re;
}edge[40005];
int n,m,ans;
int k,edgeHead[nMax];
int que[5005],pre[5005],dis[5005];
bool vis[5005];
void addEdge(int u,int v,int ca,int co){
    edge[k].v=v;
    edge[k].cap=ca;
    edge[k].cost=co;
    edge[k].next=edgeHead[u];
    edge[k].re=k + 1;
    edgeHead[u]=k ++;
    edge[k].v=u;
    edge[k].cap=0;
    edge[k].cost=-co;
    edge[k].next=edgeHead[v];
    edge[k].re=k - 1;
    edgeHead[v]=k ++;
}

bool spfa(){
    int i, head = 0, tail = 1;    //  长注释的地方就是从最小费用改到最大费用时需要变动的地方
    for(i = 0; i <= n; i ++){
        dis[i] = -1;////////////
        vis[i] = false;
    }
    dis[0] = 0;
    que[0] = 0;
    vis[0] = true;
    while(head != tail){
        int u = que[head];
        for(i = edgeHead[u]; i != 0; i = edge[i].next){
            int v = edge[i].v;
            if(edge[i].cap && dis[v] <dis[u] + edge[i].cost){////////
                dis[v] = dis[u] + edge[i].cost;
                pre[v] = i;
                if(!vis[v]){
                    vis[v] = true;
                    que[tail ++] = v;
                    if(tail == 5005) tail = 0;
                }
            }
        }
        vis[u] = false;
        head++;
        if(head ==5005) head = 0;
    }
    if(dis[n] ==-1) return false;///////////
    return true;
}

void end(){
    int u, p;
    for(u = n; u != 0; u = edge[edge[p].re].v){
        p = pre[u];
        edge[p].cap -= 1;
        edge[edge[p].re].cap += 1;
        ans += edge[p].cost;
    }
}
int main(){
    int map[60][60];
    int a,b,c,d,i,j,N,K;
    k=1;
    memset(edgeHead,0,sizeof(edgeHead));
    memset(vis,0,sizeof(vis));
    scanf("%d%d",&N,&K);
    for(i=1;i<=N;i++){
        for(j=1;j<=N;j++){
            scanf("%d",&map[i][j]);
        }
    }
    addEdge(0,1,K,0);
    for(i=1;i<=N;i++){
        for(j=1;j<=N;j++){
            a=(i-1)*N+j;
            a=a*2-1;
            b=a+1;
            addEdge(a,b,1,map[i][j]);
            addEdge(a,b,K,0);
            if(i<N)addEdge(b,a+2*N,K,0);
            if(j<N)addEdge(b,b+1,K,0);
        }
    }
    n=2*N*N;
    ans=0;
    while(spfa())end();
    cout<<ans<<endl;
    return 0;
}



OpenIddict实战:5步搞定.NET Core应用的OIDC单点登录集成 本文详细介绍了如何使用OpenIddict在.NET Core应用中快速实现OIDC单点登录集成。通过五个关键步骤,包括环境准备、数据库集成、客户端注册、令牌配置和多应用SSO集成,帮助开发者高效构建安全的企业级单点登录解决方案。 阅读详情

相关推荐

DELL服务器BIOS下配置RAID阵列

dell服务器配置raid阵列

weixin_58250887的博客 1万+

poj3422 Kaka's Matrix Travels 最大费用最大流

题意: 有个方阵,每个格子里都有一个非负数,从左上角走到右下角,每次走一步,只能往右或往下走,经过的数字拿走 每次都找可以拿到数字和最大的路径走,走k次,求最大和  这是 最大费用最大流 问题 每次spfa都找的是一条和最大的路径 s--到左上角的边流量是K限制增广次数 求最大费用最大流只需要把费用换成相反数,用最小费用最大流求解即可 构图过程:如上图 每个点拆分成两个 a a'

u013087645的专栏 810

手把手教你用Python实现ITRS与GCRS坐标转换(附完整代码)

本文详细介绍了如何使用Python的Astropy库实现ITRS与GCRS坐标转换。文章从环境配置、坐标对象构建入手,深入解析了transform_to方法背后的转换矩阵与地球定向参数管理,并通过卫星地面轨迹计算实战案例,帮助开发者掌握高精度空间坐标转换的核心技术与工程实践。

weixin_28335283的博客 79

POJ 3422 Kaka's Matrix Travels(网络流之费用流)

题目地址:POJ 3422 方法是对每个点i拆点成i'和i'',然后对每个i'和i''连一条费用为该点值,流量为1的边,再连1条费用为0,流量为k-1的边。 然后对每个点与右边下边相邻的点连边,流量均为INF,费用均为0。需要再建一源点与汇点,对于k次只需要在源点与汇点处进行限制即可。 代码如下: #include #include #include #include #inclu

scf0920 1190

ESP32 Arduino 学习篇(五)TFT_eSPI库

该库有User_Setup.h和 User_Setup_Select.h两个配置文件,支持 ①自定义参数或 ②使用已有配置 驱动TFT屏幕。优点是: 1. 占用空间非常小 2. 动画清晰,充分利用每个像素点 3. 可以非常灵动. 4. 方便进行微调。首先在Libraries里面搜索安装TFT_eSPI库到你的工程文件里面。初始化屏幕, 如果是ST7735,可以往里面传一个参数, 具体用到时再看。缺点是: 1. 容易闪屏 2. 一般不会太复杂 3.需要大量的计算。特别注意: 字库7是仿7段数码屏的样式。

DOF526570的博客 2万+

微信小游戏CE修改实战:从入门到精通(附防作弊思路)

本文深入探讨微信小游戏的安全攻防实战,重点分析CE修改、反编译和重打包等安全风险。通过详细的内存修改案例和代码保护方案对比,提供从客户端到服务端的全方位防护策略,帮助开发者构建有效的防作弊体系。

m2n3b4v5c6的博客 1139

POJ--3422--Kaka's Matrix Travels【最小费用最大流+拆点】

链接:http://poj.org/problem?id=3422 卡卡 题意:卡卡的矩阵之旅,有一个n*n的矩阵,卡卡要从左上角走到右下角,每次他只能往右或往下走,卡卡可以走k遍这个矩阵,每个点有一个num值,卡卡走到这里可以获得num点,一个点只能获得一次num值,问卡卡走完k遍后身上num值最大可以是多少? 思路:其实看到这题时没思路,图论书上说了建图的方式,但

阳光照耀圣西罗 1300

NB-IoT开发避坑指南:STM32下AT指令状态机的设计与优化

本文深入探讨了在STM32平台上为NB-IoT模组开发时,如何用状态机(FSM)设计替代传统的阻塞式AT指令处理方法。通过构建非阻塞、事件驱动的AT指令引擎,有效解决了系统卡顿、响应迟缓等问题,并详细介绍了状态机的设计、实现与高级优化技巧,助力开发者打造健壮可靠的物联网设备通信核心。

q5r6s7的博客 758

POJ 3422 Kaka's Matrix Travels (最小费用最大流)

POJ 3422 Kaka's Matrix Travels 链接:http://poj.org/problem?id=3422 题意:有一个N*N的方格,每个方格里面有一个数字。现在卡卡要从左上角走到右下角,规定每次只能向下或者向右走,每次走到一个格子,将得到该格子的数字,并且该格子的数字变为0。当卡卡走一次时,很容易求出最大值,问卡卡走k次,能够得到的最大值为多少。 思路

SIOFive的专栏 1047

[HCTF 2018]WarmUp 1学习记录

#[HCTF 2018]WarmUp 1学习笔记 最近做了做ctf,觉得真的很有趣,后悔当初没早点做,不过之前的学习也让我得到了不少经验基础,废话不多说,这次ctf虽然基本上靠了网上的大佬们(因为比较菜),但自己也做了些思考,应该对新手也比较友好吧。 ##1 首先怎么找源码,我承认我确实刚开始不知道在哪找,不过也很快找到了,相信也会有部分新手和我差不多吧 然后下面控制台会有个temp0,然后直接回车 后面我就受到启发,直接在链接后面加上source.php,进行页面跳转,然后就可以开始PHP代码审计了。

weixin_45869407的博客 684

广工计组f4b 8位12指令微程序CPU设计实验报告(内含可通过代码以及波形图)

实验目的:模型机是计算机的缩细模型,通过它可以理解计算机整机的结构和功能,理解CPU,存储器,中断控制器,接口的结构及实现逻辑和各部件之前的接口关系。本实验是设计一个8位模型计算机。:一条机器指令可以分解成一个微操作序列,这些微操作是计算机最基本的,不可再细分的操作。:在微程序控制的计算机中。将控制部件向执行部件发出的各种控制命令成为微命令,它是构成控制序列的最小单位。微命令和微操作是一一对应的。微命令是微操作的控制信号,微操作微命令的执行过程。2.:微指令是若干微命令的集合。

weixin_63692154的博客 4705

poj 3422 Kaka's Matrix Travels (最小费用最大流 模板)

题目链接:   poj 3422 题目大意:   给出NxN的数字矩阵,左上角走到右下角(只能向右或向下走),sum记录走过点值的和                   走过的点值置为0,问走K次,求sum的最大值 解题思路:   开始想到的是K次最长路,结果WA了                   因为每次走最长路会导致下次走的时候不是最优解

ンZee的解题报告 1169

“详规一张图”——上海土地利用数据

本文围绕城市规划与土地管理中空间数据的重要性,介绍了基于地理信息系统(GIS)技术对上海市用地数据进行获取与处理的具体方法。文章以上海市为例,详细阐述了如何通过构建以10米为间隔的网格点覆盖全市范围,并采用GET请求方式从“上海用地规划官网:详细规划‘一张图’公众版”平台获取地块信息的过程。通过对API接口参数的设置,包括坐标系、几何类型和返回格式等,实现了对每个网格点对应地块的属性信息(如规划用地类型、容积率、地块编号等)及几何形状信息的提取。

weixin_45812624的博客 2197

【POJ 3422】 Kaka's Matrix Travels (最小费用最大流)

【POJ 3422】 Kaka's Matrix Travels (最小费用最大流) Kaka's Matrix Travels Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8848   Accepted: 3553 Descript

ACMer' 933

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

POj3422 Kaka's Matrix Travels 最小费用最大流 拆点

题目链接: poj3422 题意: 有一个N X N的矩阵, 矩阵的每一小格都有且仅有一个数字v,kaka每经过一个数字就会把它捡起来并将那个数字加到sum上去. 现在kaka能通过向下或向右走的方式从 (1,1)到(n,n)  K次,问kaka能取到的最大的sum是多少. 解题思路: 题目问题可以抽象为   求多次可走重复路的最长路的最大和问题

旧时光 984

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

poj 3422 Kaka's Matrix Travels 最小费用最大流

我的第一道费用流,难得一次性ac啊,哈哈!不过 debug 了很久。。。建图要小心,要特别小心!!!!!这道题和大一暑假集训做的那个采蘑菇的 gondar 很像,记得哥当时用了一个犀利的一逼的dp搞定了。。。其实一点都不犀利。。。然后 racebug 问我如果有 10 个人怎么办,我想尼玛 10 个人就开个 11 维数组呗。。- -!然后 racebug 说那就果断超时了嘛。。。又说。。那果断就是

量子流逝 932

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

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

1 /* 2 poj3422 Kaka's Matrix Travels 3 不知道 k次 dp做为什么不对??? 4 看了大牛的代码,才知道还可以这样做! 5 开始没有理解将a 和 a‘ 之间建立怎样的两条边,导致程序一直陷入死循环,真心花了好长时间,快崩溃了。无语..... 6 题意:有个方阵,每个格子里都有一个非负数,从左上角走到右下角,...

aipiannian6725的博客 157

POJ 3422 Kaka's Matrix Travels 最小费用最大流

题意:给一个n*n的矩阵,可以走k次,只能往右或往下走,每次走到一个点取走这个点的数,求取走数的和的最大值 思路:要是按照我之前的思路,第一个想到的不是dfs就是dp,谁知道这种题居然可以用网络流来做,建图方式对我这个水平来说可以说是非常牛逼了。由于答案要求最大费用,故可以先把边权取负,求出最小费用,最后再取反。对于每个点拆成两个点,由DP思想,可以选择走这个点或者不走这个点,所以建两条边,一条边...

qq_42397248的博客 173

poj 3422 Kaka's Matrix Travels(最小费用最大流)

题目链接 Kaka's Matrix Travels Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9394   Accepted: 3813 Description On an N × N chessboard with a non-negativ

fouzhe的博客 313

poj 3422 Kaka's Matrix Travels(最小费用最大流)

Language: Default Kaka's Matrix Travels Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8314   Accepted: 3326 Description On an N × N chessboard with a n

youngkl博客 920

poj-3422-Kaka's Matrix Travels-最小费用最大流

最小费用最大流。 建图方式如图所示 然后就是费用流的模板~~ 把最小费用转化成最大费用,做法一样。 还有一种做法,就是把所有的边的费用取负,然后去最小费用,然后去负值就好。‘ #include #include #include #include #include using namespace std; #define INF 99999999 #define maxn 505

青竹梦 1261

[poj] 3422 Kaka's Matrix Travels || 最小费用最大流

原题 给一个N*N的方阵,从[1,1]到[n,n]走K次,走过每个方格加上上面的数,然后这个格上面的数变为0。求可取得的最大的值。 要求最大值,所以把边权全为负跑最小费用即可。因为只有第一次经过该点的时候会得到价值,所以我们将一个点拆为两个,连一条容量为1费用为负权的边和一条容量为k-1费用为0的边。然后和右和下的点连边为容量为k,费用为0的边。跑费用流即可。 #include<cstdio...

weixin_30398227的博客 109

POJ 3422 Kaka's Matrix Travels | 最小费用最大流

题目: 给个n*n的带正权矩阵,k次从(1,1)走到(n,n),每个格子的权值只能获得一次,每次只能向右或下走 问获得最大权值 题解: 求最大权值可以把权值变成负的求最小 然后考虑怎么约束每个格子的权值, 把格子拆成两个点,连两条边:一条容量为1,花费为-权值,一条容量为INF,花费为0 S到第一个格子,连容量为k,最后一个格子的二号点到T,容量为k 这样就可以限制每个点只有走...

weixin_30505225的博客 124
上一篇: poj 1470:Closest Common Ancestors(最近公共祖先,Tarjan模版)
下一篇: 关于2-sat判定求解中“同一组内必须选择”问题的思考
Ac_Ops
博客等级 码龄15年 4粉丝 5原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值