3442: 学习小组

Time Limit: 5 Sec  Memory Limit: 128 MB
Submit: 403  Solved: 193

Description

【背景】
坑校准备鼓励学生参加学习小组。
【描述】
    共有n个学生,m个学习小组,每个学生有一定的喜好,只愿意参加其中的一些学习小组,但是校领导为学生考虑,规定一个学生最多参加k个学习小组。财务处的大叔就没那么好了,他想尽量多收钱,因为每个学生参加学习小组都要交一定的手续费,不同的学习小组有不同的手续费。然而,事与愿违,校领导又决定对学习小组组织者进行奖励,若有a个学生参加第i个学习小组,那么给这个学习小组组织者奖励Ci*a^2元。在参与学生(而不是每个学习小组的人数总和)尽量多的情况下,求财务处最少要支出多少钱(若为负数,则输出负数)(支出=总奖励费-总手续费)。

Input

输入有若干行,第一行有三个用空格隔开的正整数n、m、k。接下来的一行有m个正整数,表示每个Ci。第三行有m个正整数,表示参加每个学习小组需要交的手续费Fi。再接下来有一个n行m列的矩阵,表若第i行j列的数字是1,则表示第i个学生愿意参加第j个学习小组,若为0,则为不愿意。

Output

输出只有一个整数,为最小的支出。

Sample Input

3 3 1
1 2 3
3 2 1
111
111
111

Sample Output

-2
【样例解释】
参与学生最多为3,每个学生参加一个学习小组,若有两个学生参加第一个学习小组,一个学生参加第二个学习小组(一定要有人参加第二个学习小组),支出为-2,可以证明没有更优的方案了。
【数据范围与约定】
100%的数据,0<n≤100,0<m≤90,0<k≤m,0<Ci≤10,0<Fi≤100。

HINT

Source

【分析】

转自:http://blog.csdn.net/Vmurder/article/details/43057197

今天有点傻,不想打题解了。。自己看吧。。。

  1. #include<cstdio>
  2. #include<cstdlib>
  3. #include<cstring>
  4. #include<iostream>
  5. #include<algorithm>
  6. #include<queue>
  7. using namespace std;
  8. #define Maxn 110
  9. #define INF 0x7fffffff
  10.  
  11. int mymin(int x,int y) {return x<y?x:y;}
  12.  
  13. int c[Maxn];
  14.  
  15. struct node
  16. {
  17. int x,y,f,c,o,next;
  18. }t[Maxn*Maxn*];
  19. int len,first[Maxn*];
  20.  
  21. void ins(int x,int y,int f,int c)
  22. {
  23. // swap(x,y);
  24. t[++len].x=x;t[len].y=y;t[len].f=f;t[len].c=c;
  25. t[len].next=first[x];first[x]=len;t[len].o=len+;
  26. t[++len].x=y;t[len].y=x;t[len].f=;t[len].c=-c;
  27. t[len].next=first[y];first[y]=len;t[len].o=len-;
  28. }
  29.  
  30. queue<int > q;
  31. int st,ed;
  32. int flow[Maxn*],pre[Maxn*],dis[Maxn*];
  33. bool inq[Maxn*];
  34. bool bfs()
  35. {
  36. while(!q.empty()) q.pop();
  37. for(int i=;i<=ed;i++) dis[i]=INF;
  38. memset(inq,,sizeof(inq));
  39. flow[st]=INF;q.push(st);dis[st]=;
  40. inq[st]=;
  41. while(!q.empty())
  42. {
  43. int x=q.front();
  44. for(int i=first[x];i;i=t[i].next) if(t[i].f>)
  45. {
  46. int y=t[i].y;
  47. if(dis[y]>dis[x]+t[i].c)
  48. {
  49. dis[y]=dis[x]+t[i].c;
  50. pre[y]=i;
  51. flow[y]=mymin(flow[x],t[i].f);
  52. if(!inq[y])
  53. {
  54. q.push(y);
  55. inq[y]=;
  56. }
  57. }
  58. }
  59. q.pop();inq[x]=;
  60. }
  61. if(dis[ed]==INF) return ;
  62. return ;
  63. }
  64.  
  65. int sum=;
  66. int max_flow()
  67. {
  68. while(bfs())
  69. {
  70. int x=ed;
  71. sum+=flow[ed]*dis[ed];
  72. int a=flow[ed];
  73. while(x!=st)
  74. {
  75. t[pre[x]].f-=a;
  76. t[t[pre[x]].o].f+=a;
  77. x=t[pre[x]].x;
  78. }
  79. }
  80. }
  81.  
  82. void output()
  83. {
  84. for(int i=;i<=len;i+=)
  85. printf("%d -> %d %d %d\n",t[i].x,t[i].y,t[i].f,t[i].c);
  86. }
  87.  
  88. char s[Maxn];
  89.  
  90. int main()
  91. {
  92. int n,m,k;
  93. scanf("%d%d%d",&n,&m,&k);
  94. st=n+m+;ed=st+;
  95. for(int i=;i<=m;i++)
  96. {
  97. int cc;
  98. scanf("%d",&cc);
  99. for(int j=;j<=n;j++)
  100. {
  101. ins(st,i,,cc*(*j-));
  102. }
  103. }
  104. for(int i=;i<=m;i++) scanf("%d",&c[i]);
  105. for(int i=;i<=n;i++) ins(st,i+m,k-,);
  106. for(int i=;i<=n;i++)
  107. {
  108. scanf("%s",s+);
  109. for(int j=;j<=m;j++)
  110. {
  111. if(s[j]=='') ins(j,m+i,,-c[j]);
  112. }
  113. }
  114.  
  115. for(int i=;i<=n;i++) ins(m+i,ed,k,);
  116. // output();
  117. // swap(st,ed);
  118. sum=;max_flow();
  119. printf("%d\n",sum);
  120. return ;
  121. }

2017-04-07 16:26:33

【BZOJ 3442】 3442: 学习小组 (最大费用流)的更多相关文章

  1. bzoj3442: 学习小组(费用流好题)

    3442: 学习小组 题目:传送门 题解: 超级好题啊大佬们的神题!建图肥肠灵性!感觉自己是星际玩家... 首先呢st直接向每个人连边,容量为min(k,喜欢的小组个数),费用为0 然后每个人再向ed ...

  2. BZOJ 3876 支线剧情 | 有下界费用流

    BZOJ 3876 支线剧情 | 有下界费用流 题意 这题题面搞得我看了半天没看懂--是这样的,原题中的"剧情"指的是边,"剧情点"指的才是点. 题面翻译过来大 ...

  3. 从多种角度看[BZOJ 1061] [NOI 2008]志愿者招募(费用流)

    从多种角度看[BZOJ 1061] [NOI 2008]志愿者招募(费用流) 题面 申奥成功后,布布经过不懈努力,终于成为奥组委下属公司人力资源部门的主管.布布刚上任就遇到了一个难题:为即将启动的奥运 ...

  4. 【BZOJ】【3442】学习小组

    网络流/费用流 orz zyf 裸的费用流,根据题目描述即可建出如下的图: S->i 费用表示每有一个加入第 i 个小组的学生,需要花的钱,由于是跟流量(人数)的二次方相关,所以要拆边……然后每 ...

  5. [BZOJ 1221] [HNOI2001] 软件开发 【费用流 || 三分】

    题目链接:BZOJ - 1221 题目分析 算法一:最小费用最大流 首先这是一道经典的网络流问题.每天建立两个节点,一个 i 表示使用毛巾,一个 i' 表示这天用过的毛巾. 然后 i 向 T 连 Ai ...

  6. BZOJ 1877 晨跑 拆点费用流

    题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1877 题目大意: Elaxia最近迷恋上了空手道,他为自己设定了一套健身计划,比如俯卧 ...

  7. 学习了ZKW费用流

    所谓ZKW费用流,其实就是Dinic. 若干年前有一个人发明了最小增广路算法,每次用BFS找一条增广路,时间O(nm^2) 然后被DinicD飞了:我们为什么不可以在长度不变时多路增广呢?时间O(n^ ...

  8. BZOJ 1877: [SDOI2009]晨跑(费用流)

    看到要求两个量就下意识的想到了费用流= =,先把一个点拆成两个点就能够解决一个的只经过一次的限制 CODE: #include<cstdio>#include<iostream> ...

  9. bzoj 2324 ZJOI 营救皮卡丘 费用流

    题的大概意思就是给定一个无向图,边有权值,现在你有k个人在0点,要求走到n点,且满足 1:人们可以分头行动,可以停在某一点不走了 2:当你走到x时,前x-1个点必须全部走过(不同的人走过也行,即分两路 ...

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

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

随机推荐

  1. H5多媒体

    Video <video width="500px" controls="controls"> <source src="test. ...

  2. thinkphp表单验证

    之前的表单验证都是用js写的,这里也可以使用tp框架的验证.但是两者比较而言还是js验证比较好,因为tp框架验证会运行后台代码,这样运行速度和效率就会下降. 自动验证是ThinkPHP模型层提供的一种 ...

  3. Python自定义web框架、Jinja2

    WSGI(Web Server Gateway Interface)是一种规范,它定义了使用python编写的web app与web server之间接口格式,实现web app与web server ...

  4. spring boot 加载原理

    spring boot quick start 在springBoot里面,很吸引的一个特征就是可以直接把应用打包成jar/war包形式.然后jar/war包可以直接运行的.不需要再配置web Ser ...

  5. 38 - 网络编程-socketserver

    目录 1 socket编程弊端 2 SocketServer模块 2.1 服务器类 2.2 Mixin类 2.3 RequestHandlerClass是啥 2.4 编程接口 3 实现EchoServ ...

  6. 高通msm mdm 总结

    1. svn 获取工程代码命令:svn co svn+ssh://10.20.30.18/svn-repos/msm8916/branches/LA1.1-CS-r113502.2 2. 如何确定那些 ...

  7. slave->pxc后GTID不一致

    以下两个参数在两个节点是对得上的. | wsrep_last_applied | 3363764 | | wsrep_last_committed | 3363764 但show master sta ...

  8. 在Ubuntu上安装搜狗输入法

    1.进入搜狗输入法官网 2.下载Linux版本,选择64bit 下载 3.等待下载的同时,进行系统配置 进入系统设置->语言支持->进行更新(需要输入登录密码)->在键盘输入法系统选 ...

  9. 报错:/application/zabbix/sbin/zabbix_server: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object file: No such file or directory

    启动zabbix_server时报错: /application/zabbix/sbin/zabbix_server: error while loading shared libraries: li ...

  10. [HTML]增加input标签的multiple属性上传的文件数

    .发现问题 <input type="file" name="myfile[]" multiple="multiple"/> 最 ...