【BZOJ3442】学习小组 费用流
【BZOJ3442】学习小组
Description
Input
Output
Sample Input
3 3 1
1 2 3
3 2 1
111
111
111
Sample Output
-2
题解:最小支出->最小费用流
首先很容易想到下面的几条边
1.S->每个同学 容量k,费用0
2.每个同学->他想去的学习小组 容量1,费用-f[i]
下面的一条边需要想一想,由于对每个学习小组的奖励是Ci*a^2,我想:该不会是把一条边拆成n条边,第i条费用为Ci*(2*i-1)吧? 是。
3.每个学习小组 -> T n条边,第i条容量1,费用Ci*(2*i-1)
发现这样做很好地解决了平方的问题,但下一条边感觉不WA一次是想不出来的了
4.每个同学 -> T 容量k-1,费用0
因为每个同学没必要参加那么多学习小组。但是辣鸡样例的k就是1,所以很难想到这一点
#include <cstdio>
#include <cstring>
#include <queue>
#include <iostream>
using namespace std;
int n,m,k,cnt,S,T,ans,minn;
int to[300000],next[300000],cost[300000],flow[300000],head[1000],f[110];
int dis[1000],pe[1000],pv[1000],inq[1000];
char str[110];
queue<int> q;
int rd()
{
int ret=0; char gc=getchar();
while(gc<'0'||gc>'9') gc=getchar();
while(gc>='0'&&gc<='9') ret=ret*10+gc-'0',gc=getchar();
return ret;
}
void add(int a,int b,int c,int d)
{
to[cnt]=b,cost[cnt]=c,flow[cnt]=d,next[cnt]=head[a],head[a]=cnt++;
to[cnt]=a,cost[cnt]=-c,flow[cnt]=0,next[cnt]=head[b],head[b]=cnt++;
}
int bfs()
{
memset(dis,0x3f,sizeof(dis));
int i,u;
dis[S]=0,q.push(S);
while(!q.empty())
{
u=q.front(),q.pop(),inq[u]=0;
for(i=head[u];i!=-1;i=next[i])
{
if(dis[to[i]]>dis[u]+cost[i]&&flow[i])
{
dis[to[i]]=dis[u]+cost[i],pe[to[i]]=i,pv[to[i]]=u;
if(!inq[to[i]]) inq[to[i]]=1,q.push(to[i]);
}
}
}
return dis[T]<0x3f3f3f3f;
}
int main()
{
n=rd(),m=rd(),k=rd();
int i,j,l,a;
S=0,T=n+m+1;
memset(head,-1,sizeof(head));
for(i=1;i<=m;i++)
{
a=rd();
for(j=1;j<=n;j++) add(n+i,T,(2*j-1)*a,1);
}
for(i=1;i<=m;i++) f[i]=rd();
for(i=1;i<=n;i++)
{
scanf("%s",str);
add(S,i,0,k),add(i,T,0,k-1);
for(j=1;j<=m;j++) if(str[j-1]=='1') add(i,n+j,-f[j],1);
}
while(bfs())
{
minn=1<<30;
for(i=T;i;i=pv[i]) minn=min(minn,flow[pe[i]]);
ans+=minn*dis[T];
for(i=T;i;i=pv[i]) flow[pe[i]]-=minn,flow[pe[i]^1]+=minn;
}
printf("%d",ans);
return 0;
}
【BZOJ3442】学习小组 费用流的更多相关文章
- bzoj3442学习小组
bzoj3442学习小组 题意: 共有n个学生,m个学习小组,每个学生只愿意参加其中的一些学习小组,且一个学生最多参加k个学习小组.每个学生参加学习小组财务处都收一定的手续费,不同的学习小组有不同的手 ...
- bzoj3442: 学习小组(费用流好题)
3442: 学习小组 题目:传送门 题解: 超级好题啊大佬们的神题!建图肥肠灵性!感觉自己是星际玩家... 首先呢st直接向每个人连边,容量为min(k,喜欢的小组个数),费用为0 然后每个人再向ed ...
- BZOJ3442: 学习小组
Description [背景] 坑校准备鼓励学生参加学习小组. [描述] 共有n个学生,m个学习小组,每个学生有一定的喜好,只愿意参加其中的一些学习小组,但是校领导为学生考虑,规定一个学生最 ...
- 【BZOJ 3442】 3442: 学习小组 (最大费用流)
3442: 学习小组 Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 403 Solved: 193 Description [背景] 坑校准备鼓励学生 ...
- 学习了ZKW费用流
所谓ZKW费用流,其实就是Dinic. 若干年前有一个人发明了最小增广路算法,每次用BFS找一条增广路,时间O(nm^2) 然后被DinicD飞了:我们为什么不可以在长度不变时多路增广呢?时间O(n^ ...
- zkw费用流 学习笔记
分析 记\(D_i\)为从\(S\)出发到\(i\)的最短路 最短路算法保证, 算法结束时 对于任意存在弧\((i,j)\)满足\(D_i + c_{ij}\ge D_j\) ① 且对于每个 \(j\ ...
- 【BZOJ】【3442】学习小组
网络流/费用流 orz zyf 裸的费用流,根据题目描述即可建出如下的图: S->i 费用表示每有一个加入第 i 个小组的学生,需要花的钱,由于是跟流量(人数)的二次方相关,所以要拆边……然后每 ...
- 【刷题】洛谷 P4209 学习小组
题目描述 共有n个学生,m个学习小组,每个学生只愿意参加其中的一些学习小组,且一个学生最多参加k个学习小组.每个学生参加学习小组财务处都收一定的手续费,不同的学习小组有不同的手续费.若有a个学生参加第 ...
- BZOJ3130: [Sdoi2013]费用流[最大流 实数二分]
3130: [Sdoi2013]费用流 Time Limit: 10 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 960 Solved: 5 ...
随机推荐
- 使用 SSHFS 挂载远程的 Linux 文件系统及目录
1. 安装 sudo apt-get install sshfs 2. 创建 SSHFS 挂载目录 sudo mkdir /mnt/cong 3.使用 SSHFS 挂载远程的文件系统 sudo ssh ...
- 如何让maven 将工程依赖的jar 复制到WEB-INF/lib 目录下
1.在默认生命周期的compile阶段执行 maven-dependency-plugin:copy-dependencies命令即可:<plugin><groupId>org ...
- [原]SQL相关路径查询脚本
--1.查询机器名 SELECT @@servername AS 机器名称 --查询已安装的SQL实例名 SELECT * FROM Sys.Servers --2.查询SQL安装路径 DECLARE ...
- commit
git blame -L 260, 270 a.xml no permissions fastbootsudo chown root:root fastbootsudo chmod +s fast ...
- spring-boot 中application.properties的各种配置
###########################################################datasource connect mysql################# ...
- VBOX Ubuntu设置与Windows的共享文件夹
参考资料: http://jingyan.baidu.com/article/2fb0ba40541a5900f2ec5f07.html http://zycao.com/virtualbox-ubu ...
- jquery flexslider 轮播插件
去官网下载最新的 https://www.woothemes.com/flexslider/ 引入 css 和 js api $(window).load(function() { $('.flexs ...
- 基于jquery仿360网站图片选项卡切换代码
今天给大家分享一款基于jquery仿360网站图片选项卡切换代码.这款实例适用浏览器:IE8.360.FireFox.Chrome.Safari.Opera.傲游.搜狗.世界之窗.效果图如下: 在线预 ...
- 跟着百度学PHP[10]-读取COOKIE案例
<?php if(!isset($_COOKIE['visittime'])){ #使用$_COOKIE获取visittime,如果不存在就执行下面的语句块,否则执行else setcookie ...
- CSS——伪元素
CSS伪元素 伪元素的语法: selector:pseudo-element {property:value;} 作 用 添加特殊样式 :first-line 伪元素 "first-l ...