P2050 [NOI2012]美食节(费用流)
- #include<iostream>
- #include<cstdio>
- #include<cstring>
- #include<queue>
- using namespace std;
- #define N 100005
- #define M 4000005
- int n,m,w[],e[][],v,tot;
- int d[N],a[N],p[N],S,T,tC;
- queue <int> h; bool inh[N];
- int cnt=,hd[N],nxt[M],ed[N],poi[M],val[M],cst[M];
- inline void adde(int x,int y,int v1,int v2){
- nxt[ed[x]]=++cnt, hd[x]=hd[x]?hd[x]:cnt,
- ed[x]=cnt, poi[cnt]=y, val[cnt]=v1, cst[cnt]=v2;
- }
- inline void link(int x,int y,int v1,int v2){adde(x,y,v1,v2),adde(y,x,,-v2);}
- bool bfs(){
- memset(d,,sizeof(d)); int inf=d[];
- h.push(S); inh[S]=; d[S]=; a[S]=inf;
- while(!h.empty()){
- int x=h.front(); h.pop(); inh[x]=;
- for(int i=hd[x];i;i=nxt[i]){
- int to=poi[i];
- if(val[i]>&&d[to]>d[x]+cst[i]){
- d[to]=d[x]+cst[i]; p[to]=i;
- a[to]=min(a[x],val[i]);
- if(!inh[to]) h.push(to),inh[to]=;
- }
- }
- }if(d[T]==inf) return ;
- tC+=a[T]*d[T]; int id=poi[p[T]^]+m;//做菜的厨师一定是poi[p[T]^1]%m ,它一定是通过正向边到T
- for(int i=T;i!=S;i=poi[p[i]^]) val[p[i]]-=a[T],val[p[i]^]+=a[T];
- link(id,T,,);
- for(int i=;i<=n;++i) link(tot*m+i,id,,((id-)/m+)*e[i][(id-)%m+]);
- return ;
- }
- int main(){
- scanf("%d%d",&n,&m);
- for(int i=;i<=n;++i) scanf("%d",&w[i]),tot+=w[i];
- S=tot*m+n+; T=S+;
- for(int i=;i<=n;++i) link(S,tot*m+i,w[i],);
- for(int i=;i<=m;++i) link(i,T,,);
- for(int i=;i<=n;++i)
- for(int j=;j<=m;++j)
- scanf("%d",&e[i][j]),link(tot*m+i,j,,e[i][j]);
- while(bfs());
- printf("%d",tC);
- return ;
- }
P2050 [NOI2012]美食节(费用流)的更多相关文章
- [NOI2012]美食节(费用流)
题目描述 CZ市为了欢迎全国各地的同学,特地举办了一场盛大的美食节.作为一个喜欢尝鲜的美食客,小M自然不愿意错过这场盛宴.他很快就尝遍了美食节所有的美食.然而,尝鲜的欲望是难以满足的.尽管所有的菜品都 ...
- [NOI2012]美食节——费用流(带权二分图匹配)+动态加边
题目描述 小M发现,美食节共有n种不同的菜品.每次点餐,每个同学可以选择其中的一个菜品.总共有m个厨师来制作这些菜品.当所有的同学点餐结束后,菜品的制作任务就会分配给每个厨师.然后每个厨师就会同时开始 ...
- 【bzoj2879】[Noi2012]美食节 费用流+动态加边
原文地址:http://www.cnblogs.com/GXZlegend 题目描述 CZ市为了欢迎全国各地的同学,特地举办了一场盛大的美食节.作为一个喜欢尝鲜的美食客,小M自然不愿意错过这场盛宴.他 ...
- BZOJ 2879: [Noi2012]美食节( 费用流 + 动态加边 )
倒着做菜..然后考虑为当前的人做菜对后面的人的影响就可以了..要动态加边 --------------------------------------------------------------- ...
- [BZOJ2879][NOI2012]美食节(费用流)
设sm为所有p之和,套路地对每道菜建一个点,将每个厨师拆成sm个点,做的倒数第i道菜的代价为time*i. S向每道菜连边<0,p[i]>(前者为代价后者为流量),i菜到j厨师的第k个点连 ...
- [BZOJ2879] [Noi2012] 美食节 (费用流 & 动态加边)
Description CZ市为了欢迎全国各地的同学,特地举办了一场盛大的美食节.作为一个喜欢尝鲜的美食客,小M自然不愿意错过这场盛宴.他很快就尝遍了美食节所有的美食.然而,尝鲜的欲望是难以满足的.尽 ...
- BZOJ.2879.[NOI2012]美食节(费用流SPFA)
题目链接 /* 同"修车":对于每个厨师拆成p个点表示p个时间点,每个人向m个厨师每个时间点连边 这样边数O(nmp)+网络流 ≈O(nm*p^2)(假设SPFA线性) = GG ...
- 【BZOJ 2879】[Noi2012]美食节 费用流
思路同修车,就是多了一个骚气的操作:动态加边,我们通过spfa流的过程可以知道,我们一次只会跑一流量,最后一层边跑过就不会再悔改,所以说我们只会用到一大片里面的很少的点,所以我们如果可以动态加边的话我 ...
- BZOJ 2879 [Noi2012]美食节 | 费用流 动态开点
这道题就是"修车"的数据加强版--但是数据范围扩大了好多,应对方法是"动态开点". 首先先把"所有厨师做的倒数第一道菜"和所有菜连边,然后跑 ...
随机推荐
- PHP数据结构之四 一元多项式的相加PHP单链实现
<?php /** *一元多项式的表示和相加 *一元多项式的表示采用单链表的形式 **/ header("content-type:text/html;charset=gb2312&q ...
- 中国大学MOOC 设置AutoCAD的绘图环境
- 中国大学MOOC 玩转AutoCAD 熟悉AutoCAD的人机交互方式
- 62-U型数字
https://nanti.jisuanke.com/t/20683 #include <iostream> using namespace std; int main(){ int ct ...
- jQuery基础教程-第8章-001Adding new global functions
一. 1.To add a function to the jQuery namespace, we can just assign the new function asa property of ...
- laravel中的attach and detach toggle method
创建模型 post and user 以及 users , posts ,user_post(favorities)测试数据 在此可以看上一篇中的数据,本次测试数据利用的上一篇的数据.detach ...
- Python基础入门-实现猜数字小游戏
今天呢,我们来通过前面学过的一些知识点来完成一个猜数字大小的游戏程序设计.那么呢,一般人写代码直接上来就干,没有分析,这样的做法是没有产出的,除非你是大牛,今天呢,我会把我学习编程的思路分享给大家,我 ...
- 在UIWebView中添加自定义编辑菜单
如何在UIWebView中添加自定义的编辑菜单困扰了很久.没想到意外的简单! 现在很多的内容提供类应用中,长按内容页会选中按的单词并且显示一个编辑菜单.如图: 独乐乐不如众乐乐.一篇好文章是需要大家一 ...
- Hadoop安装所遇问题及解决方法
1.错误:java.io.IOException: File /hadoop/hadooptmp/mapred/system/jobtracker.info could only be replica ...
- TensorFlow中文手册
注意:本文只为读书笔记. 第一章 起步 - 起步 - [介绍](SOURCE/get_started/introduction.md) - [下载及安装](SOURCE/get_started/os_ ...