题解:

神建图

普通的二分图费用流建完后

添加学生x->t 容量为k-1的边

表示尽量让x参加一个活动,剩下的k-1次机会可以不参加

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#include<queue>
using namespace std;
const int maxn=;
const int oo=; int n,m,k;
int a[maxn],b[maxn];
int ans=; struct Edge{
int from,to,cap,flow,cost;
};
vector<int>G[maxn];
vector<Edge>edges;
void Addedge(int x,int y,int z,int w){
Edge e;
e.from=x;e.to=y;e.cap=z;e.flow=;e.cost=w;
edges.push_back(e);
e.from=y;e.to=x;e.cap=;e.flow=;e.cost=-w;
edges.push_back(e);
int c=edges.size();
G[x].push_back(c-);
G[y].push_back(c-);
} int s,t,totn;
queue<int>q;
int inq[maxn];
int d[maxn];
int p[maxn]; int Spfa(int &nowflow,int &nowcost){
for(int i=;i<=totn;++i){
d[i]=oo;inq[i]=p[i]=;
}
d[s]=;q.push(s);
while(!q.empty()){
int x=q.front();q.pop();inq[x]=;
for(int i=;i<G[x].size();++i){
Edge e=edges[G[x][i]];
if((e.cap>e.flow)&&(d[x]+e.cost<d[e.to])){
d[e.to]=d[x]+e.cost;
p[e.to]=G[x][i];
if(!inq[e.to]){
q.push(e.to);
inq[e.to]=;
}
}
}
} if(d[t]==oo)return ;
int x=t,f=oo;
while(x!=s){
Edge e=edges[p[x]];
f=min(f,e.cap-e.flow);
x=e.from;
}
nowflow+=f;nowcost+=f*d[t];
x=t;
while(x!=s){
edges[p[x]].flow+=f;
edges[p[x]^].flow-=f;
x=edges[p[x]].from;
}
return ;
} int Mincost(){
int flow=,cost=;
while(Spfa(flow,cost)){
}
return cost;
} char ss[];
int main(){
scanf("%d%d%d",&n,&m,&k);
totn=n+m;s=++totn;t=++totn;
for(int i=;i<=m;++i)scanf("%d",&a[i]);
for(int i=;i<=m;++i)scanf("%d",&b[i]);
for(int i=;i<=m;++i){
for(int j=;j<=n;++j){
Addedge(i+n,t,,(*j-)*a[i]-b[i]);
}
}
for(int i=;i<=n;++i){
scanf("%s",ss+);
for(int j=;j<=m;++j){
if(ss[j]=='')Addedge(i,j+n,,);
}
}
for(int i=;i<=n;++i)Addedge(s,i,k,);
for(int i=;i<=n;++i)Addedge(i,t,k-,);
cout<<Mincost()<<endl;
return ;
}

BZOJ 3442 学习小组的更多相关文章

  1. 【BZOJ 3442】 3442: 学习小组 (最大费用流)

    3442: 学习小组 Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 403  Solved: 193 Description [背景] 坑校准备鼓励学生 ...

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

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

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

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

  4. BZOJ3442: 学习小组

    Description [背景] 坑校准备鼓励学生参加学习小组. [描述]     共有n个学生,m个学习小组,每个学生有一定的喜好,只愿意参加其中的一些学习小组,但是校领导为学生考虑,规定一个学生最 ...

  5. 【刷题】洛谷 P4209 学习小组

    题目描述 共有n个学生,m个学习小组,每个学生只愿意参加其中的一些学习小组,且一个学生最多参加k个学习小组.每个学生参加学习小组财务处都收一定的手续费,不同的学习小组有不同的手续费.若有a个学生参加第 ...

  6. 怎样增加Dave 英语学习小组

    一.     增加小组 英语对IT 是非常重要的,但非常多人都不能坚持去学习,Dave 英语学习小组成立与已经超过半年,如今进行扩招.欢迎想提高英语,而且能够坚持每天学习的人,增加Dave 的小组.并 ...

  7. 【BZOJ3442】学习小组 费用流

    [BZOJ3442]学习小组 Description [背景] 坑校准备鼓励学生参加学习小组. [描述] 共有n个学生,m个学习小组,每个学生有一定的喜好,只愿意参加其中的一些学习小组,但是校领导为学 ...

  8. bzoj3442学习小组

    bzoj3442学习小组 题意: 共有n个学生,m个学习小组,每个学生只愿意参加其中的一些学习小组,且一个学生最多参加k个学习小组.每个学生参加学习小组财务处都收一定的手续费,不同的学习小组有不同的手 ...

  9. Python学习小组微信群公告页面

    <简明 Python 教程>读经群,PDF地址:https://pan.baidu.com/s/1FK8s4cTfwWxSktOfS95ArQ,PyCharm-Edu地址:https:// ...

随机推荐

  1. java web开发缓存方案,ehcache和redis哪个更好

    Ehcache在java项目广泛的使用.它是一个开源的.设计于提高在数据从RDBMS中取出来的高花费.高延迟采取的一种缓存方案.正因为Ehcache具有健壮性(基于java开发).被认证(具有apac ...

  2. Redis字符串类型

    字符串是Redis中最基本的数据类型,他能存储任何形式的字符串,包括二进制数据. 命令 赋值 SET key value > SET key hello OK 取值 GET key > G ...

  3. Day2:接着思考和可能的策划

    今天早上闹钟还没响呢,老婆就把我叫醒了~说有规律宫缩了! 7点到8点记录了一个小时,宫缩差不多5~6分钟一次! 赶紧收拾东西上医院!正好今天是40周的产检,今天还是预产期! 这孩子终于肯出来了! 结果 ...

  4. intel关于spark gc的优化建议

    Apache Spark由于其出色的性能.简单的接口和丰富的分析和计算库而获得了广泛的行业应用.与大数据生态系统中的许多项目一样,Spark在Java虚拟机(JVM)上运行.因为Spark可以在内存中 ...

  5. mybatis insert后返回主键ID

    需求: mybatis  在添加记录时需要获取到记录主键id id=0 无法获取主键id的值 在插入方法中添加如下属性和相应的值 <insert useGeneratedKeys="t ...

  6. 吴裕雄--天生自然JAVA面向对象高级编程学习笔记:宠物商店实例分析

    interface Pet{ // 定义宠物接口 public String getName() ; public String getColor() ; public int getAge() ; ...

  7. Ubuntu 移植 ffmpeg + x264

    背景 直接编译移植的ffmpeg是与 arm-linux 下类似的. 详情参考: arm linux 移植 FFMPEG库 + x264 host平台 :Ubuntu 16.04 x264 :2017 ...

  8. CodeForces - 869A The Artful Expedient

    题意:有两个序列X和Y,各含n个数,这2n个数互不相同,若满足xi^yj的结果在序列X内或序列Y内的(xi,yj)对数为偶数,则输出"Karen",否则输出"Koyomi ...

  9. POJ 3259:Wormholes bellman_ford判定负环

    Wormholes Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 37906   Accepted: 13954 Descr ...

  10. Android的事件处理机制之基于回调的事件处理

    回调机制 如果说事件监听机制是一种委托式的事件处理,那么回调机制则与之相反,对于基于回调的事件处理模型来说,事件源与事件监听器是统一的,换种方法说事件监听器完全消失了,当用户在GUI组件上激发某个事件 ...