[bzoj2879][网络流,动态加边]美食节[Noi2012]
就是bzoj1070的加强版,数据规模扩大了n倍,这样要是一次把所有边都加进去的话就爆炸了,,所以使用单路增广,增广过一条边后在加入下一条边。
//By hzwer
1 #include<iostream>
#include<cstdio>
#include<cstring> #define inf 0x7fffffff
#define T 100001 using namespace std; int n,m,tot,cnt=,ans,t[][];
int c[],d[],q[],from[],head[];
bool inq[]; struct edge{int from,to,next,c,v;}e[]; void ins(int u,int v,int w,int c)
{
cnt++;
e[cnt].from=u;e[cnt].to=v;
e[cnt].next=head[u];head[u]=cnt;
e[cnt].c=c;e[cnt].v=w;
} void insert(int u,int v,int w,int c)
{ins(u,v,w,c);ins(v,u,,-c);} bool spfa()
{
for(int i=;i<=T;i++)d[i]=inf;
int t=,w=;d[]=;inq[]=;q[]=;
while(t!=w)
{
int now=q[t];t++;if(t==T)t=;
for(int i=head[now];i;i=e[i].next)
if(e[i].v&&d[e[i].to]>d[now]+e[i].c)
{
d[e[i].to]=d[now]+e[i].c;from[e[i].to]=i;
if(!inq[e[i].to])
{inq[e[i].to]=;q[w++]=e[i].to;if(w==T)w=;}
}
inq[now]=;
}
if(d[T]==inf)return ;
return ;
} void mcf()
{
int x=inf,a,b,y;
for(int i=from[T];i;i=from[e[i].from])
{
x=min(x,e[i].v);
if(e[i].from==)
{y=e[i].to;a=(y-)/tot+;b=y%tot+;}
}
for(int i=from[T];i;i=from[e[i].from])
{e[i].v-=x;e[i^].v+=x;ans+=e[i].c*x;}
for(int i=;i<=m;i++)
insert((a-)*tot+b,n*tot+i,,b*t[i][a]);
} int main()
{
scanf("%d%d",&m,&n);
for(int i=;i<=m;i++)
{
scanf("%d",&c[i]);
tot+=c[i];
}
for(int i=;i<=m;i++)
for(int j=;j<=n;j++)
scanf("%d",&t[i][j]);
for(int i=;i<=n*tot;i++)
insert(,i,,);
for(int i=;i<=m;i++)
insert(n*tot+i,T,c[i],);
for(int i=;i<=n;i++)
for(int k=;k<=m;k++)
insert((i-)*tot+,n*tot+k,,t[k][i]);
while(spfa())mcf();
printf("%d",ans);
return ;
}
[bzoj2879][网络流,动态加边]美食节[Noi2012]的更多相关文章
- 【BZOJ2879】[Noi2012]美食节 动态加边网络流
[BZOJ2879][Noi2012]美食节 Description CZ市为了欢迎全国各地的同学,特地举办了一场盛大的美食节.作为一个喜欢尝鲜的美食客,小M自然不愿意错过这场盛宴.他很快就尝遍了美食 ...
- [BZOJ2879] [Noi2012] 美食节 (费用流 & 动态加边)
Description CZ市为了欢迎全国各地的同学,特地举办了一场盛大的美食节.作为一个喜欢尝鲜的美食客,小M自然不愿意错过这场盛宴.他很快就尝遍了美食节所有的美食.然而,尝鲜的欲望是难以满足的.尽 ...
- 【bzoj2879】[Noi2012]美食节 费用流+动态加边
原文地址:http://www.cnblogs.com/GXZlegend 题目描述 CZ市为了欢迎全国各地的同学,特地举办了一场盛大的美食节.作为一个喜欢尝鲜的美食客,小M自然不愿意错过这场盛宴.他 ...
- BZOJ 2879: [Noi2012]美食节( 费用流 + 动态加边 )
倒着做菜..然后考虑为当前的人做菜对后面的人的影响就可以了..要动态加边 --------------------------------------------------------------- ...
- [NOI2012]美食节——费用流(带权二分图匹配)+动态加边
题目描述 小M发现,美食节共有n种不同的菜品.每次点餐,每个同学可以选择其中的一个菜品.总共有m个厨师来制作这些菜品.当所有的同学点餐结束后,菜品的制作任务就会分配给每个厨师.然后每个厨师就会同时开始 ...
- P2050 [NOI2012]美食节 动态加边加点
修车数据加强版 需要动态加边加点 #include<bits/stdc++.h> using namespace std; const int INF = 0x7f7f7f7f; , MA ...
- 【bzoj1189】[HNOI2007]紧急疏散evacuate BFS最短路+动态加边网络流
题目描述 发生了火警,所有人员需要紧急疏散!假设每个房间是一个N M的矩形区域.每个格子如果是'.',那么表示这是一块空地:如果是'X',那么表示这是一面墙,如果是'D',那么表示这是一扇门,人们可以 ...
- BZOJ 2879 美食节(费用流-动态加边)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2879 题意:有n道菜,每道菜需要b[i]份,m个厨师,第j个厨师做第i道菜需要时间a[i ...
- bzoj2879(动态加边费用流)
参考题解:http://blog.csdn.net/yxuanwkeith/article/details/52254602 //开始跑费用流用的dijkstra,一直错,后来发现动态加边后我不会处理 ...
随机推荐
- Linux C编程之一:Linux下c语言的开发环境
---恢复内容开始--- 今天开始根据Linux C编程相关视频的学习所做的笔记,希望能一直坚持下去... 1.开发环境的构成 编辑器:VI: 编译器:选择GNU C/C++编译器gcc: 调试器: ...
- 【js】JavaScript parser实现浅析
最近笔者的团队迁移了webpack2,在迁移过程中,笔者发现webpack2中有相当多的兼容代码,虽然外界有很多声音一直在质疑作者为什么要破坏性更新,其实大家也都知道webpack1那种过于“灵活”的 ...
- GIT学习之路第五天 分支管理
本文参考廖雪峰老师的博客进行总结,完整学习请转廖雪峰博客 5.1创建与合并分支 首先创建dev分支,然后切换dev分支 $git checkout -b dev(包含创建并切换) 等价于<-&g ...
- 三分 HDOJ 3714 Error Curves
题目传送门 /* 三分:凹(凸)函数求极值 */ #include <cstdio> #include <algorithm> #include <cstring> ...
- ASP.NET MVC应用程序中支持用户使用腾讯QQ和微信以及新浪微博的第三方登录
什么是第三方授权登录,就是一些大家都会有的帐号如QQ.微信.淘宝.微博等账户.通过那些巨头公司提供的api直接实现登录. 当然,我们是不可能得到你的用户名和密码的.不了解的人,可能会存在这个疑虑.我们 ...
- 国内使用pip / pip with GFW / pip 镜像
sudo pip install -i https://pypi.doubanio.com/simple/ YOUR_PACKAGE_NAME --trusted-host pypi.doubanio ...
- leetcode650 2 Keys Keyboard
思路: 把给定的数分解质因子之后,对于每一个质因子x,都需要x次操作(一次copy all操作和x-1次paste),所以答案就是对分解后的所有质因子求和. 实现: class Solution { ...
- 新开的坑-python学习笔记(1)——连接符与转义
1/print输出格式虽然知道怎么用却还要打破砂锅的问问题... 问题答案是 需要读很多基础文档教程 --------例如 "+" . "," 作为连接符的作 ...
- nginx_rewrite规则介绍
rewrite功能就是,使用nginx提供的全局变量或自己设置的变量,结合正则表达式和标志位实现url重写以及重定向.rewrite只能放在server{},location{},if{}中,并且只能 ...
- python队列的实现
队列是一种抽象数据结构,具有以下特点: (1)具有先进先出的特性(FIFO) (2)拥有两种基本操作,即加入和删除,而且使用front和rear两个指针来分别指向队列的前端和末尾. 队列的基本操作 c ...