hdu 2686 Matrix 最大费用最大流
最小费用最大流改动下,将本来的正边改成负边 就成了 最大费用最大流。
然后构图,自己慢慢构。
拆点,建立流量为1 费用为权值的边。
#include<cstdio>
#include<iostream>
#include<queue>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn=2000,maxm=100000,inf=100000000;struct Edge
{Edge(){};Edge(int a,int b,int c,int d){v=a;f=b;w=c;nxt=d;}int v,f,w,nxt;
};int Map[30][30];
int src,sink;
struct Edge e[maxm+10];
int g[maxn+10];
int nume;
queue<int >que;
int dist[maxn+10];
int prev[maxn+10],pree[maxn+10];
bool inQue[maxn+10];void add(int u,int v,int f,int w)
{e[++nume]=Edge(v,f,-w,g[u]);g[u]=nume;e[++nume]=Edge(u,0,w,g[v]);g[v]=nume;
}bool findPath()
{while(!que.empty()) que.pop();que.push(src);int i;for(i=1;i<=sink;i++) dist[i]=inf;dist[src]=0;memset(inQue,false,sizeof(inQue));inQue[src]=true;while(!que.empty()){int u=que.front();que.pop();for(i=g[u] ; i ;i=e[i].nxt){if(e[i].f>0&&dist[u]+e[i].w<dist[e[i].v]){dist[e[i].v]=dist[u]+e[i].w;prev[e[i].v]=u;pree[e[i].v]=i;if(!inQue[e[i].v]){que.push(e[i].v);inQue[e[i].v]=true;}}}inQue[u]=false;}if(dist[sink]<inf) return true;return false;
}int augment()
{int u=sink;int delta=inf;while(u!=src){if(e[pree[u]].f<delta) delta=e[pree[u]].f;u=prev[u];}u=sink;while(u!=src){e[pree[u]].f-=delta;e[pree[u]^1].f+=delta;u=prev[u];}return dist[sink]*delta;
}
int maxcostflow()
{int cur=0;while(findPath()){cur+=augment();}return cur;
}
int main()
{int n;int i,j;while(scanf("%d",&n)!=EOF){nume=1;memset(g,0,sizeof(g));for(i=0;i<n;i++)for(j=0;j<n;j++)scanf("%d",&Map[i][j]);src=1;sink=2*n*n;for(i=0;i<n;i++)for(j=0;j<n;j++){if(i==0&&j==0){add(src,src+n*n,2,0);if(j+1<n) add(src+n*n,i*n+j+1+1,1,0);if(i+1<n) add(src+n*n,(i+1)*n+j+1,1,0);}else if(i==n-1&&j==n-1) add(n*n,sink,2,0);else{add(i*n+j+1,i*n+j+n*n+1,1,Map[i][j]);if(j+1<n) add(i*n+j+n*n+1,i*n+j+1+1,1,0);if(i+1<n) add(i*n+j+n*n+1,(i+1)*n+j+1,1,0);}}printf("%d\n",Map[0][0]+Map[n-1][n-1]-maxcostflow());}return 0;
}
hdu 2686 Matrix 最大费用最大流相关推荐
- Going Home HDU - 1533 (最小费用最大流)
题目链接:https://cn.vjudge.net/problem/HDU-1533 题意:给你n个房子n个人 使得所有人都有一座房子的最小花费 思路:把所有的人与房子建边,最后,源点与所有的人建 ...
- POJ 2135 Farm Tour amp;amp; HDU 2686 Matrix amp;amp; HDU 3376 Matrix Again 费用流求来回最短路...
累了就要写题解,近期总是被虐到没脾气. 来回最短路问题貌似也能够用DP来搞.只是拿费用流还是非常方便的. 能够转化成求满流为2 的最小花费.一般做法为拆点,对于 i 拆为2*i 和 2*i+1.然后连 ...
- hdu 1533(最小费用最大流)
主要是如何建图 #include<stdio.h> #include<queue> #include<string.h> #include<iostream& ...
- POJ 2195 Going Home / HDU 1533(最小费用最大流模板)
题目大意: 有一个最大是100 * 100 的网格图,上面有 s 个 房子和人,人每移动一个格子花费1的代价,求最小代价让所有的人都进入一个房子.每个房子只能进入一个人. 算法讨论: 注意是KM 和 ...
- hdu Kaka's Matrix Travels(最小费用最大流)
把题意写一下: 给你一个n*n的矩阵,每个格子都有一个非负整数,从左上角走到右下角,收集走过的数字,累加,但是只能向右或者向下走,走过之后数字就变为0,让你求从左上角到右下角,走k次之后,所得的最大 ...
- HDU 2282 Chocolate (最小费用最大流)
HDU 2282 Chocolate (最小费用最大流) #include <iostream> #include <cstdio> #include <queue&g ...
- HDU 1853 HDU 3488【有向环最小权值覆盖问题 】最小费用最大流
HDU 1853 & HDU 3488[有向环最小权值覆盖问题 ]带权二分图匹配 KM算法 In the kingdom of Henryy, there are N (2 <= N & ...
- 2018ACM上海大都会赛: I. Matrix Game(最小费用最大流)
题目描述 At the start of the matrix game, we have an N x M matrix. Each grid has some balls. The grid in ...
- poj 3422 Kaka's Matrix Travels(最小费用最大流)
题目链接 Kaka's Matrix Travels Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9394 Accep ...
最新文章
- java设计一个bank类实现银行_SAP银企直连之平安银行(ECC版)
- 生信人的linux考试
- HTML4如何让一个DIV居中对齐?float输入日志标题
- vue避免重新渲染_小白也能懂的VUE的生命周期探寻
- python批量读取grib_windows python读取grib2数据
- html单张图片效果,jquery+html5实现单张图片上传预览
- 使用Spring Roo进行快速云开发–第2部分:VMware Cloud Foundry
- 请教如何保存matlab仿真出来的图,如何保存Matlab绘制出来的图像
- 安装配置NTP服务器
- Virtualbox安装Debian 安装VBoxGuestAdditions增强工具
- 使用QUARKUS开发JSON REST 服务
- charles4.0破解和手机抓包
- vscode的pip安装
- 中职学校计算机教学中,中职学校计算机教学方式
- 架构中的应用-XTT 篇
- PassMark 更新排行,苹果 M1 杀疯了
- Nginx正则表达式locationrewrite
- android之网络请求 -- 获取RecyclerView的列表项(图片 + 文字)
- redis的多路复用原理
- MRR@K P@K R@K意义阐述与对比