题目链接

见上题

每类志愿者可能是若干段,不满足那个...全幺模矩阵(全单位模矩阵)的条件,所以线性规划可能存在非整数解。

于是就可以用费用流水过去顺便拿个rank2 233.

  1. //20704kb 300ms
  2. #include <queue>
  3. #include <cstdio>
  4. #include <cctype>
  5. #include <cstring>
  6. #include <algorithm>
  7. //#define gc() getchar()
  8. #define MAXIN 300000
  9. #define gc() (SS==TT&&(TT=(SS=IN)+fread(IN,1,MAXIN,stdin),SS==TT)?EOF:*SS++)
  10. const int N=1007,M=1000005,INF=0x3f3f3f3f;
  11. int src,des,n,m,S[N],T[N],Enum,H[N],nxt[M],fr[M],to[M],cap[M],cost[M],pre[N],dis[N];
  12. char IN[MAXIN],*SS=IN,*TT=IN;
  13. inline int read()
  14. {
  15. int now=0;register char c=gc();
  16. for(;!isdigit(c);c=gc());
  17. for(;isdigit(c);now=now*10+c-'0',c=gc());
  18. return now;
  19. }
  20. inline void AddEdge(int u,int v,int w,int c)
  21. {
  22. fr[++Enum]=u, to[Enum]=v, nxt[Enum]=H[u], H[u]=Enum, cap[Enum]=w, cost[Enum]=c;
  23. fr[++Enum]=v, to[Enum]=u, nxt[Enum]=H[v], H[v]=Enum, cap[Enum]=0, cost[Enum]=-c;
  24. }
  25. bool SPFA()
  26. {
  27. static std::queue<int> q;
  28. static bool inq[N];
  29. memset(dis,0x3f,sizeof dis);
  30. dis[src]=0, q.push(src);
  31. while(!q.empty())
  32. {
  33. int x=q.front(); q.pop();
  34. inq[x]=0;
  35. for(int v,i=H[x]; i; i=nxt[i])
  36. if(cap[i] && dis[v=to[i]]>dis[x]+cost[i])
  37. {
  38. dis[v]=dis[x]+cost[i], pre[v]=i;
  39. if(!inq[v]) inq[v]=1, q.push(v);
  40. }
  41. }
  42. return dis[des]<INF;
  43. }
  44. int MCMF()
  45. {
  46. int res=0, mn=INF;
  47. for(int i=des; i!=src; i=fr[pre[i]])
  48. mn=std::min(mn,cap[pre[i]]);
  49. for(int i=des,v=pre[i]; i!=src; i=fr[v],v=pre[i])
  50. res+=mn*cost[v], cap[v]-=mn, cap[v^1]+=mn;
  51. return res;
  52. }
  53. int main()
  54. {
  55. n=read(), m=read(), Enum=1, src=1, des=n+2;
  56. for(int i=1; i<=n; ++i) AddEdge(i,i+1,INF-read(),0);
  57. for(int i=1,k,c; i<=m; ++i)
  58. {
  59. k=read();
  60. for(int j=1; j<=k; ++j) S[j]=read(),T[j]=read();
  61. c=read();
  62. for(int j=1; j<=k; ++j) AddEdge(S[j],T[j]+1,INF,c);
  63. }
  64. AddEdge(n+1,des,INF,0);
  65. int res=0;
  66. while(SPFA()) res+=MCMF();
  67. printf("%d\n",res);
  68. return 0;
  69. }

BZOJ.3265.志愿者招募加强版(费用流SPFA)的更多相关文章

  1. BZOJ 3265 志愿者招募加强版(单纯形)

    3265: 志愿者招募加强版 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 848  Solved: 436[Submit][Status][Disc ...

  2. BZOJ 3265: 志愿者招募加强版 [单纯形法]

    传送门 一个人多段区间,一样.... 不过国家队论文上说这道题好像不能保证整数解.... #include <iostream> #include <cstdio> #incl ...

  3. 【BZOJ】1061: [Noi2008]志愿者招募(费用流+数学)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1061 好神的一题! 学会了一种建模方式: 当方程组内的任意变量都在其中两个方程出现且一正一负,可以建 ...

  4. bzoj 1061 志愿者招募(最小费用最大流)

    [Noi2008]志愿者招募 Time Limit: 20 Sec  Memory Limit: 162 MBSubmit: 3792  Solved: 2314[Submit][Status][Di ...

  5. BZOJ.4514.[SDOI2016]数字配对(费用流SPFA 二分图)

    BZOJ 洛谷 \(Solution\) 很显然的建二分图后跑最大费用流,但有个问题是一个数是只能用一次的,这样二分图两部分都有这个数. 那么就用两倍的.如果\(i\)可以向\(j'\)连边,\(j\ ...

  6. P3980-[NOI2008]志愿者招募【费用流】

    正题 题目链接:https://www.luogu.com.cn/problem/P3980 题目大意 \(n\)天,第\(i\)天需要\(A_i\)个志愿者.有\(m\)种志愿者,第\(i\)种从\ ...

  7. BZOJ 1061 [Noi2008]志愿者招募(费用流)

    题目描述 申奥成功后,布布经过不懈努力,终于成为奥组委下属公司人力资源部门的主管.布布刚上任就遇到了一个难题:为即将启动的奥运新项目招募一批短期志愿者.经过估算,这个项目需要N 天才能完成,其中第i ...

  8. bzoj1061-[Noi2008]志愿者招募-单纯形 & 费用流

    有\(n\)天,\(m\)类志愿者,一个第\(i\)类志愿者可以从第\(s_i\)天工作到第\(t_i\)天,第\(i\)天工作的志愿者不少于\(b_i\)个.每一类志愿者都有单价\(c_i\),问满 ...

  9. NOI2008 志愿者招募 (费用流)

    题面 申奥成功后,布布经过不懈努力,终于成为奥组委下属公司人力资源部门的主管.布布刚上任就遇到了一个难题:为即将启动的奥运新项目招募一批短期志愿者.经过估算,这个项目需要N 天才能完成,其中第i 天至 ...

随机推荐

  1. Ubuntu下安装BeautifulSoup4

    先去下载beautifulsoup的安装包https://www.crummy.com/software/BeautifulSoup/bs4/download/4.0/ 下载完之后解压 tar -xv ...

  2. C语言复习---杨辉三角打印

    #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <math ...

  3. bzoj千题计划223:bzoj2816: [ZJOI2012]网络

    http://www.lydsy.com/JudgeOnline/problem.php?id=2816 每种颜色搞一个LCT 判断u v之间有边直接相连: 如果u和v之间有边相连,那么他们的深度相差 ...

  4. .NET面试题系列(七)IIS

    应用程序池的集成模式和经典模式的区别 应用程序池模式会影响服务器处理托管代码请求的方式. 如果托管应用程序在采用集成模式的应用程序池中运行,服务器将使用 IIS 和 ASP.NET 的集成请求处理管道 ...

  5. Redis 学习小记

    由于是学习笔记,我就不来各种啰嗦,介绍这个介绍那个,也不上交给国家,或者各种对比,相信如果你真心用 redis 的话,就不会去跟 MySql,Memcached,MongoDB 等做对比了. 我原先用 ...

  6. 鼠标样式 cursor 全总结

    本文地址:https://www.cnblogs.com/veinyin/p/10752805.html  最常用的 key  pointer   cursor: key; // 除了pointer, ...

  7. Java笔记之java.lang.String#trim

    String的trim()方法是使用频率频率很高的一个方法,直到不久前我不确定trim去除两端的空白符时对换行符是怎么处理的点进去看了下源码的实现,才发现String#trim的实现跟我想像的完全不一 ...

  8. linux backtrace()详细使用说明,分析Segmentation fault【转】

    转自:http://velep.com/archives/1032.html 在此之前,开发eCos应用程序时,经常碰到程序挂掉后,串口打印输出一大串让人看不懂的数据.今天才明白,原来这些数据是程序挂 ...

  9. 使用 CasperJS 构建 Web 爬虫

    转载:https://www.oschina.net/translate/building-your-own-web-scraper-in-nodejs 从你的应用中收集数据有时候可能有点困难和艰辛. ...

  10. Project Euler Problem2

    Even Fibonacci numbers Problem 2 Each new term in the Fibonacci sequence is generated by adding the ...