hdu 2686最小费用最大流问题
#include<stdio.h>
#include<queue>
#include<string.h>
using namespace std;
#define inf 0x7fffffff
struct node{
int u,v,w,f,next;
}bian[20000];
int dis[6000],pre[6000],head[6000],visit[6000],yong,minf;
void build(int u,int v,int w,int f) {
bian[yong].u=u;
bian[yong].v=v;
bian[yong].w=w;
bian[yong].f=f;
bian[yong].next=head[u];
head[u]=yong++;
}
void adde(int u,int v,int w,int f) {
build(u,v,w,f);
build(v,u,-w,0);
}
int spfa(int s,int t) {
memset(visit,0,sizeof(visit));
memset(pre,-1,sizeof(pre));
for(int i=0;i<=t;i++)//注意是从0开始而不是从s开始
dis[i]=inf;
queue<int>q;
visit[s]=1;//必须是s
q.push(s);
dis[s]=0;
while(!q.empty ()) {
int u=q.front ();
for(int index=head[u];index!=-1;index=bian[index].next) {
int v=bian[index].v;
if(bian[index].f&&dis[v]>dis[u]+bian[index].w) {
dis[v]=dis[u]+bian[index].w;
pre[v]=index;
if(!visit[v]) {
visit[v]=1;
q.push (v);
}
}
}
q.pop();
visit[u]=0;//是u
}
if(dis[t]==inf)
return 0;
return 1;
}
void addf(int s,int t ) {
int i=pre[t];
int j;
while(i!=-1) {
j=i^1;
bian[i].f--;
bian[j].f++;
minf+=bian[i].w;
i=pre[bian[i].u];//前一个u
}
}
int main() {
int n,k,map[60][60];
while(scanf("%d",&n)!=EOF) {
memset(head,-1,sizeof(head));
k=2;
yong=0;
int s=2*n*n;
int t=s+1;
int i,j;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%d",&map[i][j]);
for(i=0;i<n;i++)
for(j=0;j<n;j++) {
int b=i*n+j;
adde(2*b,2*b+1,-map[i][j],1);
adde(2*b,2*b+1,0,k-1);
}
for(i=0;i<n;i++)
for(j=0;j<n-1;j++) {
int b=i*n+j;
adde(2*b+1,2*(b+1),0,k);
}
for(i=0;i<n-1;i++)
for(j=0;j<n;j++) {
int b=i*n+j;
adde(2*b+1,2*(b+n),0,k);
}
adde(s,0,0,k);
adde(2*n*n-1,t,0,k);
minf=0;
while(spfa(s,t)) {
addf(s,t);
}
printf("%d\n",-minf);
}
return 0;
}
hdu 2686最小费用最大流问题的更多相关文章
- HDU 1533 最小费用最大流(模板)
http://acm.hdu.edu.cn/showproblem.php?pid=1533 这道题直接用了模板 题意:要构建一个二分图,家对应人,连线的权值就是最短距离,求最小费用 要注意void ...
- poj3422 Kaka's Matrix Travels(最小费用最大流问题)
/* poj3422 Kaka's Matrix Travels 不知道 k次 dp做为什么不对??? 看了大牛的代码,才知道还可以这样做! 开始没有理解将a 和 a‘ 之间建立怎样的两条边,导致程序 ...
- 【网络流#2】hdu 1533 - 最小费用最大流模板题
最小费用最大流,即MCMF(Minimum Cost Maximum Flow)问题 嗯~第一次写费用流题... 这道就是费用流的模板题,找不到更裸的题了 建图:每个m(Man)作为源点,每个H(Ho ...
- 算法笔记_140:最小费用最大流问题(Java)
目录 1 问题描述 2 解决方案 1 问题描述 在最大流有多组解时,给每条边在附上一个单位费用的量,问在满足最大流时的最小费用是多少? 2 解决方案 下面代码所使用的测试数据如下图: 具体代码如下 ...
- hdu 3667(最小费用最大流+拆边)
Transportation Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- hdu 1533(最小费用最大流)
Going Home Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...
- hdu 4862KM&最小费用最大流
/*最小K路径覆盖的模型,用费用流或者KM算法解决, 构造二部图,X部有N*M个节点,源点向X部每个节点连一条边, 流量1,费用0,Y部有N*M个节点,每个节点向汇点连一条边,流量1, 费用0,如果X ...
- hdu 6437 /// 最小费用最大流 负花费 SPFA模板
题目大意: 给定n,m,K,W 表示n个小时 m场电影(分为类型A.B) K个人 若某个人连续看了两场相同类型的电影则失去W 电影时间不能重叠 接下来给定m场电影的 s t w op 表示电影的 开始 ...
- Java实现最小费用最大流问题
1 问题描述 在最大流有多组解时,给每条边在附上一个单位费用的量,问在满足最大流时的最小费用是多少? 2 解决方案 下面代码所使用的测试数据如下图: package com.liuzhen.pract ...
随机推荐
- Java报表之JFreeChart
一.JFreeChart简介 JFreeChart是JAVA平台上的一个开放的图表绘制类库.它完全使用JAVA语言编写,是为applications,servlets以及JSP等使用所设计. JFre ...
- 不需要用任何辅助工具打包Qt应用程序
不需要用任何辅助工具打包Qt应用程序.方法如下: 生成release文件后,双击里面的exe文件,会弹出一个对话框,里面提示缺少哪一个DLL文件, 然后根据该文件名到你安装QT软件的目录下的/b ...
- jacob的使用方法
网上一大堆你抄我的,我抄你的,但基本配置都没说清,做个笔记让后来的人少走冤枉路 1.下载最新的jacob,jdk版本一一对应,1.6对应jacob的1.16,1.7对应1.17.... 2.应用程序将 ...
- 项目中非常有用并且常见的ES6语法
今天闲着无事,梳理下ES6常见的语法知识点:除此之外的知识点自行细化和梳理! <!DOCTYPE html> <html> <head> <meta char ...
- [转载]ant和maven的区别
Ant是软件构建工具,Maven的定位是软件项目管理和理解工具.Maven除了具备Ant的功能外,还增加了以下主要的功能: 1)使用Project Object Model来对软件项目管理: 2)内置 ...
- 再遇BGP
第一次遇到BGP,是在大学的课堂上,现在再次看到它,有种深深的无奈,我只记得它的名字,忘记了它的样子. 那么什么是BGP呢? 翻译过来就是边界网关协议,一个用来网络数据进行选路的路由协议,使用TCP协 ...
- class 写在 import的位置 类的名字第一个字母大写 后面没括号 ES6
class 写在 import的位置 类的名字第一个字母大写 后面没括号 class ObTableDataClass {}或者 const ObTableDataClass = class { in ...
- 网页添加tittle前的图标logo
在head标签中 <link rel="icon" href="~/favicon.ico" type="image/x-icon" ...
- 网易技术分享:Nginx缓存引发的跨域惨案
推荐:更多技术团队分享文章 关注:MAYOU18技术专栏 1. 前言 贵金属wap版直播间上线后,偶尔有用户反馈,在进入wap直播间的时候,出现空白页面,但是重新刷新又可以正常显示了.我们曾一度认为是 ...
- Linux文件查找find和locate
目 录 第1章 locate文件查找 1 1.1 概述 1 1.2 locate文件查找的特性 1 第2章 文件查找概述 1 第3章 1 3.1 文件名查找 1 3 ...