[NOI2012]美食节

题解:

很经典的网络流

对于每个厨师拆点分开统计 1倍 2倍 3倍

n(mp)^2 有点大

动态加边

即对于每个厨师有了i才会有i+1

不过好像还是有点卡常??

代码:

 

#include <bits/stdc++.h>
using namespace std;
#define INF 1e9
#define N 2000000
struct re{int a,b,c,from,flow,cost;
}a[N];
int head[N],l,d[N],p[N],aa[N],dy1[N],dy2[N],tt[1000][1000],cnt;
int n,m,s,t,maxa[N];
bool inq[N];
void arr(int x,int y,int z,int flow,int cost,int xx,int yy)
{a[++l].a=head[x];a[l].b=y;a[l].c=z;head[x]=l;a[l].flow=flow;a[l].cost=cost;a[l].from=x;dy1[l]=xx;dy2[l]=yy;
}
bool bellmanford(int &flow,int &cost)
{for (int i=1;i<=t;i++) d[i]=INF;memset(inq,0,sizeof(inq));d[s]=0; inq[s]=1; p[s]=0; aa[s]=INF;queue<int> q;q.push(s);while (!q.empty()){int x=q.front(); q.pop(); inq[x]=0;int u=head[x];while (u){int v=a[u].b;if (a[u].c>a[u].flow&&d[v]>d[x]+a[u].cost){d[v]=d[x]+a[u].cost;p[v]=u;aa[v]=min(aa[x],a[u].c-a[u].flow);if (!inq[v]) q.push(v),inq[v]=1;}u=a[u].a;}}if (d[t]==INF) return(0);flow+=aa[t];cost+=d[t]*aa[t];int x=t;while (x!=s){int u=p[x];a[u].flow+=aa[t];if (u%2) a[u+1].flow-=aa[t];else a[u-1].flow-=aa[t];if (dy2[u]==maxa[dy1[u]]){int y=dy1[u];maxa[y]++;cnt++;for (int i=1;i<=n;i++){arr(i,cnt,1,0,tt[i][y]*maxa[y],y,maxa[y]);arr(cnt,i,0,0,-tt[i][y]*maxa[y],y,maxa[y]);}arr(cnt,t,1,0,0,0,0);arr(t,cnt,0,0,0,0,0);}//cout<<a[u].from<<" "<<a[u].b<<" "<<a[u].cost<<" "<<a[u].flow<<endl;x=a[u].from;}//cout<<endl;return 1;
}
int flow,cost;
void mincost()
{while (bellmanford(flow,cost));
}
int pp[N];
int main()
{std::ios::sync_with_stdio(false);cin>>n>>m;int sum=0;for (int i=1;i<=n;i++){cin>>pp[i]; sum+=pp[i];}for (int i=1;i<=n;i++)for (int j=1;j<=m;j++)cin>>tt[i][j];s=0; t=n+m*sum+1;for (int i=1;i<=n;i++)arr(s,i,pp[i],0,0,0,0),arr(i,s,0,0,0,0,0);maxa[0]=INF;for (int i=1;i<=n;i++)for (int j=1;j<=m;j++){maxa[j]=1;cnt=n+j;arr(i,cnt,1,0,tt[i][j],j,1);arr(cnt,i,0,0,-tt[i][j],j,1);}for (int i=1;i<=m;i++){cnt=n+i;arr(cnt,t,1,0,0,0,0);arr(t,cnt,0,0,0,0,0);}cnt=n+m;
/*    for (int i=1;i<=l;i++){cout<<a[i].b<<" "<<a[i].from<<" "<<a[i].c<<" "<<a[i].cost<<endl;} */mincost();cout<<cost<<endl;return 0;
}

 

转载于:https://www.cnblogs.com/yinwuxiao/p/8878460.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/353774.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

请问:如何实现文件日志功能?要求每天换一个文件。文件名以日期区分

结帖率&#xff1a;100%#1 得分&#xff1a;0 回复于&#xff1a; 2004-06-22 17:24:13 使用一个单独的类封装日志记录&#xff0c;在该类中记录当前使用的文件名&#xff0c;每次记日志时获取一下系统时间&#xff0c;与文件名匹配一下&#xff0c;发现日期不同则新开文件。下…

微信小程序的scroll-view组件

scroll-view为滚动视图&#xff0c;共有水平滚动和垂直滚动两种使用竖向滚动时&#xff0c;需要给<scroll-view/>一个固定高度&#xff0c;通过 WXSS 设置 height。index.wxss 是页面的结构文件&#xff1a;<!--垂直滚动--> <view class"section">…

eclipse使用技巧_有效使用Eclipse的热门技巧

eclipse使用技巧以下是一些技巧&#xff0c;可以帮助您避免潜在的问题并在使用Eclipse时提高工作效率。 避免安装问题 切勿在旧版本之上安装新版本的Eclipse。 首先重命名旧版本&#xff0c;以将其移开&#xff0c;然后将新版本解压缩到干净的目录中。 恢复混乱的工作空间 …

日志文件的编写

/// <summary> /// 写入日志到文本文件 /// </summary> /// <param name"action">动作</param> /// <param name"strMessage">日志内容</param> /// <param name"time">时间</param> pub…

MFC非模态对话框实例

【转载】MFC非模态对话框实例 2012-06-17 16:21:41| 分类&#xff1a; C/MFC | 标签&#xff1a; |字号大中小 订阅 实例目的 在Windows环境中&#xff0c;对话框是一种常用的输入输出手段。对话框有两种类型&#xff0c;非模态和模态。非模态对话框与模态对话框不同&a…

Node简单服务器开发

运用的知识&#xff1a;http&#xff0c;fs&#xff0c;get&#xff0c;post 接口定义&#xff1a;/user?actreg$useraaa&passbbb后台返回格式&#xff1a;{"ok":false,"msg":"原因"}/user?actlogin$useraaa&passbbb后台返回格式&…

5个常见的Hibernate异常及其解决方法

了解如何使用Hibernate轻松解决最常见的问题 Hibernate可能是市场上最受欢迎的JPA实现&#xff0c;您可以在许多地方看到它&#xff0c;例如&#xff1a; 您自己使用过的项目数&#xff0c; 需要Hibernate经验的职位数量&#xff0c;当然还有 互联网上发布的问题和例外数量…

MATLAB figure中提取数据

MATLAB figure中提取数据 (2011-10-26 14:26:21) 转载▼标签&#xff1a; 杂谈 分类&#xff1a; matlab figure画出来&#xff0c;提取数据有很多好处&#xff0c;方便保存&#xff0c;计算&#xff0c;加工&#xff0c;还可以导入到origin里面画图。具体的方法就是两部。第一…

Wine下完美安装QQ 2010:

Wine下完美安装QQ 2010&#xff1a;1、先安装Wine&#xff1a;sudo apt-get install wine2、获取获取最新的WineTricks&#xff0c;WineTricks 是 Wine的其中一个开发者DanKegel写的一个安装Windows有关库和软件的小程序&#xff0c;非常有用。下载WineTricks&#xff0c;在终端…

stopwatch_在Java中衡量执行时间– Spring StopWatch示例

stopwatch有两种方法可以通过使用System.currentTimeinMillis&#xff08;&#xff09;或使用System.nanoTime&#xff08;&#xff09; 来测量Java中经过的执行时间 。 这两个方法可用于测量 Java中两个方法调用或事件之间的经过时间或执行时间 。 计算经过的时间是Java程序员…

oracle客户端中文乱码问题的解决

1 查看服务器端编码 select userenv(language) from dual; 我实际查看到的结果为&#xff1a; USERENV(LANGUAGE) ----------------------------- AMERICAN_AMERICA.ZHS16GBK 2 执行语句 select * from V$NLS_PARAMETERS; 查看第一行PARAMETER项中为NLS_LANGUAGE对应的VALUE项…

avi文件格式详解

avi文件格式详解 AVI是音频视频交错(Audio Video Interleaved)的英文缩写&#xff0c;它是Microsoft公司开发的一种符合RIFF文件规范的数字音频与视频文件格式&#xff0c;原先用于Microsoft Video for Windows (简称VFW)环境&#xff0c;现在已被Windows 95/98、OS/2等多数操作…

许多参数和丢失的信息

代码越少越好&#xff1f; 对象越少越好&#xff1f; 是真的吗 像往常一样&#xff0c;这取决于。 在某些情况下&#xff0c;通过添加更多内容&#xff0c;我们会添加不必要的复杂性。 当我们仅出于“将来可能需要这种额外的灵活性”而创建接口或其他抽象时&#xff0c;就会发…

并发编程---线程queue---进程池线程池---异部调用(回调机制)

线程 队列&#xff1a;先进先出堆栈&#xff1a;后进先出优先级&#xff1a;数字越小优先级越大&#xff0c;越先输出import queueq queue.Queue(3) # 先进先出-->队列q.put(first) q.put(2) # q.put(third) # q.put(4) #由于没有人取走&#xff0c;就会卡主 q.put(4,block…

avi编码格式以及查看的视频编码方式的小工具

avi编码格式以及查看的视频编码方式的小工具 2009-06-06 17:55:47| 分类&#xff1a; 默认分类 | 标签&#xff1a; |字号大中小 订阅 首先要说明的是&#xff0c;文件后缀名为avi的文件不一定使用的编码方式就是一样的&#xff0c;所以才写下来&#xff0c;以备以后查阅…

SQL Server遗失管理权限账号密码怎么办?

假如一个SQL Server实例只允许“SQL身份认证”模式登录数据库&#xff0c;而糟糕的是你忘记了sa的密码&#xff08;sa出于安全考虑应该被禁用&#xff0c;这里仅仅为了描述问题&#xff09;或其它具有sysadmin角色的登录名的密码&#xff1f;个人就遇到这样一个案例&#xff0c…

MFC 定时器使用方式

MFC 定时器使用方式 2011-04-30 12:24:58| 分类&#xff1a; 默认分类 | 标签&#xff1a; |字号大中小 订阅 用SetTimer函数 创建定时器 参数1表示定时器的ID&#xff0c;参数2表示时间间隔&#xff0c;最后一个参数是处理的函数&#xff0c;如果填NULL表示&#xff0…

js循环获取table中的值

<script type"text/javascript">function getTdValue() {var tableId document.getElementById("tab");var str "";//获取table中的某一列的值for (var i 1; i < tableId.rows.length; i) {alert(tableId.rows[i].cells[3].innerHTM…

MFC中Radio Button使用方法

MFC中Radio Button使用方法2012-04-19 09:44:22 我来说两句 收藏 我要投稿 先为对话框加上2个radio button&#xff0c;分别是Radio1和Radio2。 问题1&#xff1a;如何让Radio1或者Radio2默认选上&#xff1f;如何知道哪个被选上了&#xff1f; 关键是选上&#x…

使用不可变对象创建值对象

在回答我最近的文章中AutoValue&#xff1a;生成的不可变的值类 &#xff0c; 布兰登认为&#xff0c;这可能是有趣的&#xff0c;看看如何AutoValue比较项目Lombok和Immutables和凯文借调这一点。 我同意这是一个好主意&#xff0c;但是我首先将这篇文章发布为Immutables的简要…