原题链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1221

题意:你有3种方法进行对毛巾的处理,不同的处理方法有不同的cost,问你要如何规划才可以使得总花费最低。

解题思路:我们对每个点进行拆点,分为用过的毛巾和没用过的,这样就可以较为简单的连边,然后跑个最小费用最大流即可。

AC代码:

  1. #include<stdio.h>
  2. #include<string.h>
  3. #define inf 0x7fffffff
  4. #define min(a,b) (a<b?a:b)
  5. struct zxy{int to,next,c,v;}edge[];
  6. int n,e,cnt=,head[],dis[],que[],pre[],fc,ta,tb,fa,fb;
  7. bool vis[];
  8. inline int in(){
  9. int x=;
  10. char ch=getchar();
  11. while(ch<''||ch>'') ch=getchar();
  12. while(ch>=''&&ch<='') x=x*+ch-'',ch=getchar();
  13. return x;
  14. }
  15. inline void ins(int x,int y,int v,int l){
  16. edge[++cnt].to=y,edge[cnt].next=head[x],edge[cnt].v=v,edge[cnt].c=l,head[x]=cnt;
  17. edge[++cnt].to=x,edge[cnt].next=head[y],edge[cnt].v=,edge[cnt].c=l*(-),head[y]=cnt;
  18. }
  19. inline bool SPFA(int s,int e){
  20. for (register int i=s; i<=e; ++i) dis[i]=inf/;
  21. int h=,t=;
  22. que[]=s;
  23. dis[s]=;vis[s]=;
  24. do{
  25. int w=que[++h];
  26. for (register int i=head[w]; i; i=edge[i].next)
  27. if (dis[w]+edge[i].c<dis[edge[i].to]&&edge[i].v){
  28. int v=edge[i].to;pre[v]=i;
  29. dis[v]=dis[w]+edge[i].c;
  30. if (!vis[v]){
  31. vis[v]=;
  32. if (dis[v]<dis[que[h+]])que[h--]=v;
  33. else que[++t]=v;
  34. }
  35. }
  36. vis[w]=;
  37. }while(h<t);
  38. return dis[e]!=inf/;
  39. }
  40. int cost_flow(int s,int t){
  41. int cost=;
  42. while(SPFA(s,t)){
  43. int mi=inf;
  44. for (register int i=t; i; i=edge[pre[i]^].to)
  45. mi=min(mi,edge[pre[i]].v);
  46. for (register int i=t; i; i=edge[pre[i]^].to)
  47. edge[pre[i]].v-=mi,edge[pre[i]^].v+=mi;
  48. cost+=dis[t]*mi;
  49. }
  50. return cost;
  51. }
  52. void init(){
  53. n=in(),ta=in(),tb=in(),fc=in(),fa=in(),fb=in();
  54. for (int i=; i<=n; ++i){
  55. register int x=in();
  56. ins(,n+i,inf,fc);
  57. ins(,i,x,);
  58. ins(n+i,*n+,x,);
  59. if(i<n) ins(i,i+,inf,);
  60. if(i+ta<n) ins(i,i+ta+n+,inf,fa);
  61. if(i+tb<n) ins(i,i+tb+n+,inf,fb);
  62. }
  63. }
  64. int main(){
  65. init();
  66. printf("%d",cost_flow(,*n+));
  67. }

【网络流】【BZOJ1221】【HNOI2001】软件开发的更多相关文章

  1. bzoj1221: [HNOI2001] 软件开发

    挖坑.我的那种建图方式应该也是合理的.然后连样例都过不了.果断意识到应该为神奇建图法... #include<cstdio> #include<cstring> #includ ...

  2. BZOJ1221 [HNOI2001] 软件开发 【费用流】

    题目 某软件公司正在规划一项n天的软件开发计划,根据开发计划第i天需要ni个软件开发人员,为了提高软件开发人员的效率,公司给软件人员提供了很多的服务,其中一项服务就是要为每个开发人员每天提供一块消毒毛 ...

  3. 【费用流】bzoj1221 [HNOI2001] 软件开发

    几乎为“线性规划与网络流24题”中的餐巾问题. 这里把S看成毛巾的来源,T看成软件公司,我们的目的就是让每天的毛巾满足要求(边满流). 引用题解: [问题分析] 网络优化问题,用最小费用最大流解决. ...

  4. BZOJ1221 [HNOI2001]软件开发 - 费用流

    题解 非常显然的费用流. 但是建图还是需要思考的QuQ 将每天分成两个节点 $x_{i,1}, x_{i,2} $, $ x_{i,1}$用于提供服务, $x_{i ,2}$ 用来从源点获得$nd[i ...

  5. BZOJ 3280: 小R的烦恼 & BZOJ 1221: [HNOI2001] 软件开发

    3280: 小R的烦恼 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 399  Solved: 200[Submit][Status][Discuss ...

  6. 【BZOJ 1221】 1221: [HNOI2001] 软件开发 (最小费用流)

    1221: [HNOI2001] 软件开发 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1581  Solved: 891 Description ...

  7. bzoj 1221 [HNOI2001] 软件开发 费用流

    [HNOI2001] 软件开发 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1938  Solved: 1118[Submit][Status][D ...

  8. BZOJ 1221: [HNOI2001] 软件开发

    1221: [HNOI2001] 软件开发 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1428  Solved: 791[Submit][Stat ...

  9. BZOJ 1221: [HNOI2001] 软件开发(最小费用最大流)

    不知道为什么这么慢.... 费用流,拆点.... --------------------------------------------------------------------------- ...

  10. 【bzoj1221】[HNOI2001] 软件开发 费用流

    题目描述 某软件公司正在规划一项n天的软件开发计划,根据开发计划第i天需要ni个软件开发人员,为了提高软件开发人员的效率,公司给软件人员提供了很多的服务,其中一项服务就是要为每个开发人员每天提供一块消 ...

随机推荐

  1. C程序设计-----第0次作业

    C程序设计-----第0次作业- 1.翻阅邹欣老师的关于师生关系博客,并回答下列问题,每个问题的答案不少于500字:(50分)- 1)最理想的师生关系是健身教练和学员的关系,在这种师生关系中你期望获得 ...

  2. EXT3文件系统误删除导致文件系统中的邮件丢失恢复方法

    一.故障描述 由8块盘组成的RAID5, 上层是EXT3文件系统,由于误删除导致文件系统中的邮件丢失 二.镜像磁盘为防止数据恢复过程中由于误操作对原始磁盘造成二次破坏, 使用winhex软件为每块磁盘 ...

  3. PV & PVC - 每天5分钟玩转 Docker 容器技术(150)

    Volume 提供了非常好的数据持久化方案,不过在可管理性上还有不足. 拿前面 AWS EBS 的例子来说,要使用 Volume,Pod 必须事先知道如下信息: 当前 Volume 来自 AWS EB ...

  4. HDFS的7个设计特点

    1.Block的放置:默认不配置.一个Block会有三份备份,一份放在NameNode指定的DataNode,另一份放在与指定DataNode非同一Rack上的DataNode,最后一份放在与指定Da ...

  5. 分贝块---dBblock

    分贝,用英语来表达的话,是decibel,是量度两个相同单位之数量比例的计量单位,主要用于度量声音强度,常用dB表示. 块,block,在百度百科中,指数据库中的最小存储和处理单位,包含块本身的头信息 ...

  6. SpringBoot应用的监控与管理

    spring-boot-starter-actuator模块 /health /autoconfig /beans /configprops:应用配置属性信息 /env:环境属性,如:环境变量.jvm ...

  7. 新概念英语(1-57)An unusual day

    新概念英语(1-57)An unusually day What is Mr. Sawyer doing tonight? It is eight o'clock. The children go t ...

  8. python基础—迭代器、生成器

    python基础-迭代器.生成器 1 迭代器定义 迭代的意思是重复做一些事很多次,就像在循环中做的那样. 只要该对象可以实现__iter__方法,就可以进行迭代. 迭代对象调用__iter__方法会返 ...

  9. html标记语言 --格式标记

    html标记语言 --格式标记 一.格式标记 1.<br>单标记,强制换行标记,让后面的文字.图片.表格等显示在下一行 2.<p>换段落标记 3.<center>居 ...

  10. Checkbutton

    #tkinter之Checkbutton篇 #Checkbutton又称为多选按钮,可以表示两种状态,On和Off,可以设置回调函数,每当点击此按钮时回调函数被调用. 1.一个简单的Checkbutt ...