分析:

一开始一直Wa,发现是建图建错了,必须得拆点。

S连i,流量为a[i],费用为0,i+n连T,流量同上,费用为0,之后i连i+1费用为0,流量为inf,之后S连n*2+i,流量为li,费用为0,之后枚举j从1到n,n*2+i连接j+n,费用为p[i],之后i连接i+d[i]+1,费用为q[i],流量为inf,之后跑费用流就可以了。

附上代码:

  1. #include <cstdio>
  2. #include <cmath>
  3. #include <algorithm>
  4. #include <cstdlib>
  5. #include <cstring>
  6. #include <queue>
  7. #include <iostream>
  8. using namespace std;
  9. #define N 155
  10. #define S 0
  11. #define T 151
  12. struct node
  13. {
  14. int to,next,val,flow,from;
  15. }e[N*200];
  16. int head[N],cnt,dis[N],vis[N],from[N],ans,n,m,k;
  17. void add(int x,int y,int z,int v)
  18. {
  19. e[cnt].to=y,e[cnt].next=head[x],e[cnt].val=v;
  20. e[cnt].flow=z,e[cnt].from=x,head[x]=cnt++;
  21. }
  22. void insert(int x,int y,int z,int v)
  23. {
  24. add(x,y,z,v);add(y,x,0,-v);
  25. }
  26. int spfa()
  27. {
  28. memset(dis,0x3f,sizeof(dis));memset(from,-1,sizeof(from));
  29. queue <int>q;q.push(S);dis[S]=0;
  30. while(!q.empty())
  31. {
  32. int x=q.front();q.pop();vis[x]=0;
  33. for(int i=head[x];i!=-1;i=e[i].next)
  34. {
  35. int to1=e[i].to;
  36. if(e[i].flow&&dis[to1]>dis[x]+e[i].val)
  37. {
  38. from[to1]=i;
  39. dis[to1]=dis[x]+e[i].val;
  40. if(!vis[to1])vis[to1]=1,q.push(to1);
  41. }
  42. }
  43. }
  44. return dis[T]==0x3f3f3f3f?0:1;
  45. }
  46. void mcf()
  47. {
  48. int x,i=from[T];
  49. while(i!=-1){x=min(e[i].flow,x);i=from[e[i].from];}
  50. i=from[T];
  51. while(i!=-1){e[i].flow-=x,e[i^1].flow+=x,ans+=x*e[i].val,i=from[e[i].from];}
  52. return ;
  53. }
  54. int a[N];
  55. int main()
  56. {
  57. int t;
  58. scanf("%d",&t);
  59. for(int cas=1;cas<=t;cas++)
  60. {
  61. printf("Case %d: ",cas);
  62. int v=0;ans=0;
  63. memset(head,-1,sizeof(head));cnt=0;
  64. scanf("%d%d%d",&n,&m,&k);
  65. for(int i=1;i<n;i++)insert(i,i+1,1<<30,0);
  66. for(int i=1;i<=n;i++)
  67. {
  68. int x;
  69. scanf("%d",&x);a[i]=x;
  70. insert(S,i,x,0);
  71. insert(i+n,T,x,0);
  72. }
  73. for(int i=1;i<=m;i++)
  74. {
  75. int x,y;
  76. scanf("%d%d",&x,&y);
  77. insert(S,2*n+i,x,0);
  78. for(int j=1;j<=n;j++)insert(2*n+i,j+n,x,y);
  79. }
  80. for(int i=1;i<=k;i++)
  81. {
  82. int x,y;
  83. scanf("%d%d",&x,&y);
  84. for(int j=1;j+x+1<=n;j++)
  85. {
  86. insert(j,j+n+x+1,1<<30,y);
  87. }
  88. }
  89. while(spfa())mcf();
  90. for(int i=head[T];i!=-1;i=e[i].next)
  91. {
  92. if(e[i^1].flow!=0)
  93. {
  94. v=1;
  95. puts("impossible");
  96. break;
  97. }
  98. }
  99. if(!v)printf("%d\n",ans);
  100. }
  101. return 0;
  102. }

  

小R的烦恼 BZOJ3280的更多相关文章

  1. 【BZOJ3280】小R的烦恼 最小费用最大流

    [BZOJ3280]小R的烦恼 Description 小R最近遇上了大麻烦,他的程序设计挂科了.于是他只好找程设老师求情.善良的程设老师答应不挂他,但是要求小R帮助他一起解决一个难题. 问题是这样的 ...

  2. BZOJ3280: 小R的烦恼

    题解: 随便建一下图费用流就可以过吧... 代码: #include<cstdio> #include<cstdlib> #include<cmath> #incl ...

  3. 【BZOJ】【3280】小R的烦恼

    网络流/费用流 和软件开发那题基本相同,只是多加了一个“雇佣研究生”的限制:不同价格的研究生有不同的数量…… 那么只需加一个附加源点,对每一种研究生连边 S->ss 容量为l[i],费用为p[i ...

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

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

  5. BZOJ_3280_小R的烦恼_最小费用最大流

    BZOJ_3280_小R的烦恼_最小费用最大流 Description 小R最近遇上了大麻烦,他的程序设计挂科了.于是他只好找程设老师求情.善良的程设老师答应不挂他,但是要 求小R帮助他一起解决一个难 ...

  6. bzoj3280: 小R的烦恼(最小费用最大流)

    Description 小R最近遇上了大麻烦,他的程序设计挂科了.于是他只好找程设老师求情.善良的程设老师答应不挂他,但是要 求小R帮助他一起解决一个难题.问题是这样的,程设老师最近要进行一项邪恶的实 ...

  7. 【bzoj3280】小R的烦恼 费用流

    题目描述 小R最近遇上了大麻烦,他的程序设计挂科了.于是他只好找程设老师求情.善良的程设老师答应不挂他,但是要求小R帮助他一起解决一个难题. 问题是这样的,程设老师最近要进行一项邪恶的实验来证明P=N ...

  8. bzoj 3280: 小R的烦恼 费用流

    题目: Description 小R最近遇上了大麻烦,他的程序设计挂科了.于是他只好找程设老师求情.善良的程设老师答应不挂他,但是要求小R帮助他一起解决一个难题. 问题是这样的,程设老师最近要进行一项 ...

  9. BZOJ 3280: 小R的烦恼

    Description 小R最近遇上了大麻烦,他的程序设计挂科了.于是他只好找程设老师求情.善良的程设老师答应不挂他,但是要 求小R帮助他一起解决一个难题.问题是这样的,程设老师最近要进行一项邪恶的实 ...

随机推荐

  1. jQuery操作table数据上移、下移和置顶

    jQuery 操作table中的tr换行的步骤如下: 1.获取当前tr var $tr = $(this).parents("tr"); 2.移动tr //上移 $tr.prev( ...

  2. JS--我发现,原来你是这样的JS(引用类型不简单[上篇],且听我娓娓道来)

    一.介绍 没错,这是第五篇,到了引用类型,这次要分成两次博文了,太多内容了,这是前篇,篇幅很长也很多代码,主要讲引用类型和常用的引用类型,代码试验过的,老铁没毛病. 坚持看坚持写,不容易不容易,希望大 ...

  3. Jmeter 测试结果分析之聚合报告简介

    Jmeter 测试结果分析之聚合报告简介 by:授客 QQ:1033553122 聚合报告(aggregate report) 对于每个请求,它统计响应信息并提供请求数,平均值,最大,最小值,错误率, ...

  4. chrome浏览器使用chrome://inspect调试app 网页,打开空白的问题

    使用chrome浏览器,输入chrome://inspect可以调试android app里面的网页,如果inspect的时候,是空白, 问题截图: 那就在C:\Windows\System32\dr ...

  5. AutoCompleteTextView 自定义提示样式

    项目中用到AutoCompleteTextView  自动提示功能,如果用自带的ArrayAdapter就一种样式,非常丑,而且每一项提示文字过多的话不会自动换行. 所以自己自定义了一个适配器. 效果 ...

  6. 绝版Node--Sequlize搭建服务(Node全栈之路)

    绝版Node--Sequlize搭建服务(Node全栈之路) 参考资料:https://itbilu.com/nodejs/npm/VkYIaRPz-.html 准备环境:Mysql,Node 前沿: ...

  7. UWP开发细节记录:判断文件类型

    StorageFile.ContentType 属性,是 string 类型,用来表示文件内容的 MIME 类型.例如,音乐文件可能有 "audio/mpeg" MIME 类型.( ...

  8. 【转】boost库之geometry

    #include <boost/assign.hpp> #include <boost/geometry/geometry.hpp> #include <boost/ge ...

  9. Linux简单使用

    1.基本命令 创建目录pathA:mkdir pathA 进入目录pathA:cd pathA 查看目录内容:ls 查看目录下文件的详细信息:ls -l,也可以是:ll(l是小写的L,别看错了) 拷贝 ...

  10. HTIML5 真的打败了Flash?新测试结果出人意料

    [编者按]本文最早发布于 2010 年,通过 Flash 与 HTML5 在 Mac 及 Windows 平台不同浏览器中的测试表现,比较两者的性能并分析背后的原因.虽然是一篇老文,但其客观冷静的分析 ...