洛谷P4014分配问题——网络流24题
题目:https://www.luogu.org/problemnew/show/P4014
最大/小费用最大流裸题。
代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
queue<int>q;
int const inf=1e9;
int n,t,head[],ct=,pre[],mx,mn,incf[],dis[];
bool vis[];
struct N{
int hd,to,next,w,v;
N(int h=,int t=,int n=,int w=,int v=):hd(h),to(t),next(n),w(w),v(v) {}
}edge[],tmp[];
bool spfa()
{
memset(dis,-,sizeof dis);
memset(incf,0x3f,sizeof incf);
memset(vis,,sizeof vis);
memset(pre,,sizeof pre);
while(q.size())q.pop();
dis[]=;vis[]=;q.push();
while(q.size())
{
int x=q.front();q.pop();vis[x]=;
for(int i=head[x];i;i=edge[i].next)
{
int u=edge[i].to;
if(dis[u]<dis[x]+edge[i].w&&edge[i].v)
{
dis[u]=dis[x]+edge[i].w;
pre[u]=i;
incf[u]=min(incf[x],edge[i].v);
if(!vis[u])vis[u]=,q.push(u);
}
}
}
return pre[t];
}
bool spfa2()
{
memset(dis,0x3f,sizeof dis);
memset(incf,0x3f,sizeof incf);
memset(vis,,sizeof vis);
memset(pre,,sizeof pre);
while(q.size())q.pop();
dis[]=;vis[]=;q.push();
while(q.size())
{
int x=q.front();q.pop();vis[x]=;
for(int i=head[x];i;i=tmp[i].next)
{
int u=edge[i].to;
if(dis[u]>dis[x]+tmp[i].w&&tmp[i].v)
{
dis[u]=dis[x]+tmp[i].w;
pre[u]=i;
incf[u]=min(incf[x],tmp[i].v);
if(!vis[u])vis[u]=,q.push(u);
}
}
}
return pre[t];
}
void mcf()
{
memcpy(tmp,edge,sizeof edge);
while(spfa())
{
mx+=incf[t]*dis[t];
for(int i=pre[t];i;i=pre[edge[i].hd])
{
edge[i].v-=incf[t];
edge[i^].v+=incf[t];
}
}
while(spfa2())
{
mn+=incf[t]*dis[t];
for(int i=pre[t];i;i=pre[edge[i].hd])
{
tmp[i].v-=incf[t];
tmp[i^].v+=incf[t];
}
}
}
int main()
{
scanf("%d",&n);
t=*n+;
for(int i=;i<=n;i++)
{
edge[++ct]=(N){,i,head[],,};head[]=ct;
edge[++ct]=(N){i,,head[i],,};head[i]=ct;
}
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
{
int x;
scanf("%d",&x);
edge[++ct]=(N){i,j+n,head[i],x,};head[i]=ct;
edge[++ct]=(N){j+n,i,head[j+n],-x,};head[j+n]=ct;
}
for(int j=;j<=n;j++)
{
edge[++ct]=(N){j+n,t,head[j+n],,};head[j+n]=ct;
edge[++ct]=(N){t,j+n,head[t],,};head[t]=ct;
}
mcf();
printf("%d\n%d",mn,mx);
return ;
}
洛谷P4014分配问题——网络流24题的更多相关文章
- 洛谷P4011 【网络流24题】 孤岛营救问题 (BFS+状压)
一道妙题啊......(不知道为什么这道题的标签是网络流,不需要用网络流啊) 如果没有门和钥匙,连边(边权为1)求最短路就行了. 但是有这两个因素的限制,我们采用分层建图的思想,一共2p层,每层对应持 ...
- 洛谷P4015 运输问题 网络流24题
看了下SPFA题解,一个一个太麻烦了,另一个写的很不清楚,而且注释都变成了"????"不知道怎么过的,于是自己来一发SPFA算法. Part 1.题意 M 个仓库,卖给 N 个商店 ...
- 洛谷P4014 分配问题【最小/大费用流】题解+AC代码
洛谷P4014 分配问题[最小/大费用流]题解+AC代码 题目描述 有 n 件工作要分配给 n 个人做.第 i 个人做第 j 件工作产生的效益为c ij. 试设计一个将 n 件工作分配给 n 个人做的 ...
- 洛谷——P4014 分配问题
P4014 分配问题 题目描述 有 nn 件工作要分配给 nn 个人做.第 ii 个人做第 jj 件工作产生的效益为 c_{ij}cij .试设计一个将 nn 件工作分配给 nn 个人做的分配方案, ...
- Luogu P4014 「 网络流 24 题 」分配问题
解题思路 还是建立超级源点和超级汇点,又因为题目给出规定一个人只能修一个工件,所以建图的时候还要讲容量都设为$1$. 人的编号是$1\rightarrow n$,工件的编号是$n+1\rightarr ...
- 洛谷P4014 分配问题(费用流)
传送门 可以把原图看做一个二分图,人在左边,任务在右边,求一个带权的最大和最小完美匹配 然而我并不会二分图做法,所以只好直接用费用流套进去,求一个最小费用最大流和最大费用最大流即可 //minamot ...
- 洛谷 P4014 分配问题 【最小费用最大流+最大费用最大流】
其实KM更快--但是这道题不卡,所以用了简单粗暴的费用流,建图非常简单,s向所有人连流量为1费用为0的边来限制流量,所有工作向t连流量为1费用为0的边,然后对应的人和工作连(i,j,1,cij),跑一 ...
- 洛谷P4014 分配问题(费用流)
题目描述 有 nn 件工作要分配给 nn 个人做.第 ii 个人做第 jj 件工作产生的效益为 c_{ij}cij .试设计一个将 nn 件工作分配给 nn 个人做的分配方案,使产生的总效益最大. ...
- 洛谷P4009汽车加油行驶问题——网络流24题(最短路)
题目:https://www.luogu.org/problemnew/show/P4009 网络流24题中不是网络流的最短路题: 把每个点拆成各个油量上的点,根据要求连边即可: 注意:点数最大为10 ...
随机推荐
- 如何使用电骡eMule上传资源
1 在电脑中创建一个文件夹专门为上传资源使用 在里面放入任意文件并右击显示ED2K链接 链接效果如下 2 登陆verycd网站,并点击上传资源 复制ED2K地址并选择分类
- OpenGL之路(七)为立方体加入丰富色彩
在立方体的六个面贴上不同的颜色,假设想达到混合颜色的效果,能够參照立方体的前面代码在每一行前都加上颜色 代码例如以下 #include <gl/glut.h> #pragma commen ...
- persits.jpeg 水印组件
官方下载的persits.jpeg 都须要注冊.不然就有时间限制.可今天须要个persits.jpeg 破解版安装到server上,可百度了半天也没找到.最后还是找到了. 很捧的水印组件,玩serve ...
- PHP_EOL是什么意思?
PHP_EOL 代表php的换行符, 这个变量会根据平台而变, 在windows下会是/r/n, 在linux下是/n, 在mac下是/r 文章来源:刘俊涛的博客 地址:h ...
- Vue.js 使用cordova camera插件调取相机
本文给出在vue.js里如何使用cordova的插件完成调取相机及图库,并完成图片上传的操作.具体的操作步骤如下 第一步:在cordova项目下安装cordova-plugin-camera插件 co ...
- 用ELK 实时处理搜索日志
转载请标明原处:http://blog.csdn.net/hu948162999/article/details/50563110 本来这块业务 是放到SolrCloud上去的 , 然后 採用solr ...
- UIView 的 autoresizingMask 属性 详解。
转载自:liubo0_0的专栏 链接网址:http://blog.csdn.net/liubo0_0/article/details/7085935 在 UIView 中有一个autoresizin ...
- gulp(基础篇)
今天在写项目的时候用到了gulp构建工具,虽然一年前就有用过,但是一直只存在于我的“有道云笔记”里,今天又一次用到,固然是巩固一下,这里来记录一下吧:这里我主要想要记录的就是初学者在第一次使用gulp ...
- php实现双色球算法
function DoubleBall(){ $sysBlueball = mt_rand(1,16); $sysRedball = array(1,2,3,4,5,6,7,8,9,10,11,12, ...
- java监听器演示样例
监听器的原理是观察者模式.就像明星(事件源)聚拢了一群粉丝(观察者).当明星有啥举动的时候会通过粉丝们报道出去. 订阅信息.计算器button都是该原理的应用. 以下写了一个监听器的小样例: pack ...