【BZOJ2245】[SDOI2011]工作安排(费用流)

题面

BZOJ

洛谷

题解

裸的费用流吧。

不需要拆点,只需要连边就好了,保证了\(W_j<W_{j+1}\)。

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<queue>
  5. using namespace std;
  6. #define ll long long
  7. #define MAX 600
  8. #define inf 1000000000
  9. inline int read()
  10. {
  11. int x=0;bool t=false;char ch=getchar();
  12. while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
  13. if(ch=='-')t=true,ch=getchar();
  14. while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
  15. return t?-x:x;
  16. }
  17. struct Line{int v,next,w,fy;}e[1000000];
  18. int h[MAX],cnt=2;
  19. inline void Add(int u,int v,int w,int fy)
  20. {
  21. e[cnt]=(Line){v,h[u],w,fy};h[u]=cnt++;
  22. e[cnt]=(Line){u,h[v],0,-fy};h[v]=cnt++;
  23. }
  24. int S,T,n,m;
  25. ll Cost,Flow;
  26. ll dis[MAX];bool vis[MAX];
  27. int pe[MAX],pv[MAX];
  28. bool SPFA()
  29. {
  30. memset(dis,63,sizeof(dis));dis[S]=0;
  31. queue<int> Q;Q.push(S);vis[S]=true;
  32. while(!Q.empty())
  33. {
  34. int u=Q.front();Q.pop();
  35. for(int i=h[u];i;i=e[i].next)
  36. {
  37. int v=e[i].v;
  38. if(e[i].w&&dis[v]>dis[u]+e[i].fy)
  39. {
  40. pe[v]=i;pv[v]=u;
  41. dis[v]=dis[u]+e[i].fy;
  42. if(!vis[v])vis[v]=true,Q.push(v);
  43. }
  44. }
  45. vis[u]=false;
  46. }
  47. if(dis[T]>1e9)return false;
  48. int flow=inf;
  49. for(int i=T;i!=S;i=pv[i])flow=min(flow,e[pe[i]].w);
  50. for(int i=T;i!=S;i=pv[i])e[pe[i]].w-=flow,e[pe[i]^1].w+=flow;
  51. Flow+=flow;Cost+=dis[T]*flow;
  52. return true;
  53. }
  54. int TT[MAX],WW[MAX],C[MAX];
  55. int main()
  56. {
  57. m=read();n=read();S=0;T=m+n+1;
  58. for(int i=1;i<=n;++i)Add(m+i,T,C[i]=read(),0);
  59. for(int i=1;i<=m;++i)
  60. for(int j=1;j<=n;++j)
  61. if(read())Add(i,m+j,inf,0);
  62. for(int i=1;i<=m;++i)
  63. {
  64. int D=read(),lt=0;
  65. for(int j=1;j<=D;++j)TT[j]=read();
  66. for(int j=1;j<=D+1;++j)WW[j]=read();
  67. for(int j=1;j<=D;++j)Add(S,i,TT[j]-lt,WW[j]),lt=TT[j];
  68. Add(S,i,inf,WW[D+1]);
  69. }
  70. while(SPFA());
  71. printf("%lld\n",Cost);
  72. return 0;
  73. }

【BZOJ2245】[SDOI2011]工作安排(费用流)的更多相关文章

  1. [bzoj2245][SDOI2011]工作安排——费用流

    题目大意: 传送门 题解: 很容易建模,把每一个工作人员拆成两个点,由第一个点向第二个点连S+1条边即可. 这水题没什么难度,主要是longlong卡的丧心病狂... 代码 #include < ...

  2. BZOJ 2245: [SDOI2011]工作安排( 费用流 )

    费用流模板题..限制一下不同愤怒值的工作数就可以了. ------------------------------------------------------------------------- ...

  3. 【bzoj2245】[SDOI2011]工作安排 费用流

    题目描述 你的公司接到了一批订单.订单要求你的公司提供n类产品,产品被编号为1~n,其中第i类产品共需要Ci件.公司共有m名员工,员工被编号为1~m员工能够制造的产品种类有所区别.一件产品必须完整地由 ...

  4. P2488 [SDOI2011]工作安排 费用流

    \(\color{#0066ff}{ 题目描述 }\) 你的任务是制定出一个产品的分配方案,使得订单条件被满足,并且所有员工的愤怒值之和最小.由于我们并不想使用Special Judge,也为了使选手 ...

  5. [bzoj2245][SDOI2011]工作安排(费用流)

    题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=2245 分析: 要注意到题目下面说的w是单增的 明显的费用流: 弄个源点S,汇点T S连 ...

  6. bzoj2245: [SDOI2011]工作安排

    费用流. 这道题的模型比较明显,拆点也是很容易看出来的. #include<cstdio> #include<algorithm> #include<cstring> ...

  7. BZOJ 2245 SDOI 2011 工作安排 费用流

    题目大意:有一些商品须要被制造.有一些员工.每个员工会做一些物品,然而这些员工做物品越多,他们的愤慨值越大,这满足一个分段函数.给出哪些员工能够做哪些东西,给出这些分段函数,求最小的愤慨值以满足须要被 ...

  8. BZOJ2245 [SDOI2011]工作安排 【费用流】

    题目 你的公司接到了一批订单.订单要求你的公司提供n类产品,产品被编号为1~n,其中第i类产品共需要Ci件.公司共有m名员工,员工被编号为1~m员工能够制造的产品种类有所区别.一件产品必须完整地由一名 ...

  9. 【BZOJ2245】[SDOI2011]工作安排 拆边费用流

    [BZOJ2245][SDOI2011]工作安排 Description 你的公司接到了一批订单.订单要求你的公司提供n类产品,产品被编号为1~n,其中第i类产品共需要Ci件.公司共有m名员工,员工被 ...

随机推荐

  1. Winio驱动在64位windows下无法使用的解决方法

    C#在使用WinIo的驱动开发类似按键精灵一类工具的时候,需要对相关的驱动进行注册才能正常启动,找了下资料,资料来自: http://jingyan.baidu.com/article/642c9d3 ...

  2. Java 中单引号和双引号的区别

    引自:https://blog.csdn.net/hubianyu/article/details/39700367 单引号引的数据 是char类型的 双引号引的数据 是String类型的char定义 ...

  3. linux中fork, source和exec的区别

    转:linux中fork, source和exec的区别 shell的命令可以分为内部命令和外部命令. 内部命令是由特殊的文件格式.def实现的,如cd,ls等.而外部命令是通过系统调用或独立程序实现 ...

  4. oracle如何导出和导入数据库/表

    oracle如何导出和导入数据库/表 oracle如何将项目中的表导出后在导入自己的数据库中,这是一个完整的操作,对于数据库备份或在本地查看数据验证数据进场用到,一般情况下我都用dos黑窗口进行操作, ...

  5. 天气提醒邮件服务器(python + scrapy + yagmail)

    天气提醒邮件服务器(python + scrapy + yagmail) 项目地址: https://gitee.com/jerry323/weatherReporter 前段时间因为xxx上班有时候 ...

  6. aws ubuntu 开启root

    Linux VPS没有ROOT权限是很难受的事,并且密码登陆也方便一些.我的AWS VPS的LINUX版本是UBUNTU 13.10,首先用AWS证书验证的账户登录, 1.修改ROOT密码sudo p ...

  7. 利用阿里云的源yum方式安装Mongodb

    今天在线上服务器上安装MongoDB,从Mongo官网直接下载链接,结果在下载时发觉速度慢的可怜.迫于无奈,只能找国内的镜像下载.这里选择阿里云的源进行安装,记录如下: 1)在/etc/yum.rep ...

  8. Linux下monit进程管理操作梳理

    Monit对运维人员来说可谓神器,它是一款功能非常丰富的进程.文件.目录和设备的监测工具,用于Unix平台.它可以自动修复那些已经停止运作的程序,特使适合处理那些由于多种原因导致的软件错误.Monit ...

  9. bootstrap完善按钮组bug

    .btn.active { border: 1px solid #ff9400 !important; color: #ff9400 !important; } <div class=" ...

  10. oracle数据恢复方法

    https://www.cnblogs.com/hqbhonker/p/3977200.html