HDU3376 最小费用最大流 模板2

时间:2023-02-22 10:59:30

Matrix Again

Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 102400/102400 K (Java/Others)
Total Submission(s): 4255    Accepted Submission(s): 1233

Problem Description
Starvae very like play a number game in the n*n Matrix. A positive integer number is put in each area of the Matrix.
Every time starvae should to do is that choose a detour which from the top left point to the bottom right point and than back to the top left point with the maximal values of sum integers that area of Matrix starvae choose. But from the top to the bottom can only choose right and down, from the bottom to the top can only choose left and up. And starvae can not pass the same area of the Matrix except the start and end..
Do you know why call this problem as “Matrix Again”? AS it is like the problem 2686 of HDU.
 
Input
The input contains multiple test cases.
Each case first line given the integer n (2<=n<=600) 
Then n lines, each line include n positive integers. (<100)
 
Output
For each test case output the maximal values starvae can get.
 
Sample Input
2
10 3
5 10
3
10 3 3
2 5 3
6 7 10
5
1 2 3 4 5
2 3 4 5 6
3 4 5 6 7
4 5 6 7 8
5 6 7 8 9
 
Sample Output
28
46
80
 
Author
Starvae
 
Source
 代码:
//和HDU2686一样,只是数据变大了,上一个模板会超内存,这个板不会。
/***********************最小费用最大流模板2*************************/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
const int maxn=**+;
const int maxm=*maxn;//!边数要够
const int inf=0x7fffffff;
struct Edge
{
int to,next,cap,flow,cost;
}edges[maxm];
int head[maxn],tol,pre[maxn],dis[maxn];
bool vis[maxn];
int N;
void init(int n)
{
N=n;
tol=;
memset(head,-,sizeof(head));
}
void AddEdge(int u,int v,int cap,int cost)
{
edges[tol].to=v;
edges[tol].cap=cap;
edges[tol].cost=cost;
edges[tol].flow=;
edges[tol].next=head[u];
head[u]=tol++;
edges[tol].to=u;
edges[tol].cap=;
edges[tol].cost=-cost;
edges[tol].flow=;
edges[tol].next=head[v];
head[v]=tol++;
}
bool spfa(int s,int t)
{
queue<int>q;
for(int i=;i<=N;i++){
dis[i]=inf;
vis[i]=;
pre[i]=-;
}
dis[s]=;
vis[s]=;
q.push(s);
while(!q.empty()){
int u=q.front();q.pop();
vis[u]=;
for(int i=head[u];i!=-;i=edges[i].next){
int v=edges[i].to;
if(edges[i].cap>edges[i].flow&&dis[v]>dis[u]+edges[i].cost){
dis[v]=dis[u]+edges[i].cost;
pre[v]=i;
if(!vis[v]) {vis[v]=;q.push(v);}
}
}
}
if(pre[t]==-) return ;
return ;
}
int MinCostFlow(int s,int t)
{
int flow=,cost=;
while(spfa(s,t)){
int Min=inf;
for(int i=pre[t];i!=-;i=pre[edges[i^].to])
Min=min(Min,edges[i].cap-edges[i].flow);
for(int i=pre[t];i!=-;i=pre[edges[i^].to]){
edges[i].flow+=Min;
edges[i^].flow-=Min;
cost+=edges[i].cost*Min;
}
flow+=Min;
}
return cost;//返回最小费用,flow存最大流
}
/*********************************************************************/
int main()
{
int n,mp[][];
while(scanf("%d",&n)==){
for(int i=;i<=n;i++)
for(int j=;j<=n;j++) scanf("%d",&mp[i][j]);
int s=,t=n*n*+;
init(n*n*+);
for(int i=;i<=n;i++){
for(int j=;j<=n;j++){
int id=(i-)*n+j;
if(id==){
AddEdge(id,id+n*n,,-mp[i][j]);
AddEdge(s,id,,);
}
else if(id==n*n){
AddEdge(id,id+n*n,,-mp[i][j]);
AddEdge(id+n*n,t,,);
}
else AddEdge(id,id+n*n,,-mp[i][j]);
if(i<n) AddEdge(id+n*n,id+n,,);
if(j<n) AddEdge(id+n*n,id+,,);
}
}
int ans=-(MinCostFlow(s,t)+mp[][]+mp[n][n]);
printf("%d\n",ans);
}
return ;
}

HDU3376 最小费用最大流 模板2的更多相关文章

  1. 图论算法-最小费用最大流模板【EK&semi;Dinic】

    图论算法-最小费用最大流模板[EK;Dinic] EK模板 const int inf=1000000000; int n,m,s,t; struct node{int v,w,c;}; vector ...

  2. 洛谷P3381 最小费用最大流模板

    https://www.luogu.org/problem/P3381 题目描述 如题,给出一个网络图,以及其源点和汇点,每条边已知其最大流量和单位流量费用,求出其网络最大流和在最大流情况下的最小费用 ...

  3. 最大流 &amp&semi;&amp&semi; 最小费用最大流模板

    模板从  这里   搬运,链接博客还有很多网络流题集题解参考. 最大流模板 ( 可处理重边 ) ; const int INF = 0x3f3f3f3f; struct Edge { int from ...

  4. Doctor NiGONiGO’s multi-core CPU(最小费用最大流模板)

    题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=693 题意:有一个 k 核的处理器和 n 个工作,全部的工作都须要在一个核上处理一个单位的 ...

  5. 【网络流&num;2】hdu 1533 - 最小费用最大流模板题

    最小费用最大流,即MCMF(Minimum Cost Maximum Flow)问题 嗯~第一次写费用流题... 这道就是费用流的模板题,找不到更裸的题了 建图:每个m(Man)作为源点,每个H(Ho ...

  6. poj 2195 最小费用最大流模板

    /*Source Code Problem: 2195 User: HEU_daoguang Memory: 1172K Time: 94MS Language: G++ Result: Accept ...

  7. POJ2135 最小费用最大流模板题

    练练最小费用最大流 此外此题也是一经典图论题 题意:找出两条从s到t的不同的路径,距离最短. 要注意:这里是无向边,要变成两条有向边 #include <cstdio> #include ...

  8. POJ 2135 Farm Tour (最小费用最大流模板)

    题目大意: 给你一个n个农场,有m条道路,起点是1号农场,终点是n号农场,现在要求从1走到n,再从n走到1,要求不走重复路径,求最短路径长度. 算法讨论: 最小费用最大流.我们可以这样建模:既然要求不 ...

  9. 2018牛客网暑期ACM多校训练营(第五场) E - room - &lbrack;最小费用最大流模板题&rsqb;

    题目链接:https://www.nowcoder.com/acm/contest/143/E 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K ...

随机推荐

  1. 独立IP 与 共享IP

    最近在阿里云产品体系中折腾的不亦乐乎,在选则服务器的时候,会有独立IP和共享IP的两种不同的选择,这里查阅资料予以记录,独立IP与共享IP的区别: 因为IP资源有限,独立IP就是说一个IP地址只给你一 ...

  2. Javascript 知识点整理

    1.十进制和十六进制相互转换 /* 十六进制转十进制 */ var test = FF; var x = parseInt(test ,16); //方法一 x = parseInt('0x'+tes ...

  3. MVC拦截器记录操作用户日志

    主要是用于记录用户操作动态, public class OperationAttribute:ActionFilterAttribute { /// <summary> /// 方法名称 ...

  4. Software license key and activation

    http://*.com/questions/16222674/software-license-key-and-activationhttps://github.com/La ...

  5. UVA 540&lpar;队列)

    Description  Team Queue  Queues and Priority Queues are data structures which are known to most comp ...

  6. redis 初识

    架构 sharding redis 集群是主从式架构,数据分片是根据hash slot(哈希槽来分布) 总共有16384个哈希槽,所以理论上来说,集群的最大节点(master) 数量是16384个.一 ...

  7. Gradle 学习一

    参考教程:https://guides.gradle.org/consuming-jvm-libraries/ 安装Gradle 下载地址:https://guides.gradle.org 配置环境 ...

  8. 判断是否某App

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <meta name= ...

  9. PPTP 在Centos 7&period;1 建立方法与失效处理

    # yum install pptp pptp-setup pptpsetup --create vpn --server  (serverName) --username (Username)  - ...

  10. Structs复习 开始 第一个helloworld项目

    大体已经学完ssh了  感觉一起做一个项目有点难 计划先用一下独立的Structs 然后再把数据库操作换成hibernate  然后在用Spring 整合 计划用10天左右吧 但今天开始用Struct ...