bzoj3442 學習小組

2021-09-07 13:17:58 字數 2051 閱讀 6691

time limit: 5 sec  

memory limit: 128 mb

submit: 200  

solved: 87

[submit][

status][

discuss]

【背景】

坑校準備鼓舞學生參加學習小組。

【描寫敘述】

共同擁有n個學生,m個學習小組,每乙個學生有一定的喜好,僅僅願意參加當中的一些學習小組,可是校領導為學生考慮。規定乙個學生最多參加k個學習小組。財務處的大叔就沒那麼好了,他想盡量多收錢。由於每乙個學生參加學習小組都要交一定的手續費。不同的學習小組有不同的手續費。然而,事與願違,校領導又決定對學習小組組織者進行獎勵,若有a個學生參加第i個學習小組,那麼給這個學習小組組織者獎勵ci*a^2元。

在參與學生(而不是每乙個學習小組的人數總和)盡量多的情況下,求財務處最少要支出多少錢(若為負數。則輸出負數)(支出=總獎勵費-總手續費)。

輸入有若干行,第一行有三個用空格隔開的正整數n、m、k。接下來的一行有m個正整數,表示每乙個ci。第三行有m個正整數,表示參加每乙個學習小組須要交的手續費fi。再接下來有乙個n行m列的矩陣,表若第i行j列的數字是1。則表示第i個學生願意參加第j個學習小組,若為0,則為不願意。

輸出僅僅有乙個整數。為最小的支出。

3 3 1

1 2 3

3 2 1

111111

111-2

【例子解釋】

參與學生最多為3,每乙個學生參加乙個學習小組,若有兩個學生參加第乙個學習小組,乙個學生參加第二個學習小組(一定要有人參加第二個學習小組)。支出為-2,能夠證明沒有更優的方案了。

【資料範圍與約定】

100%的資料,0<n≤100,0<m≤90,0<k≤m,0<ci≤10。0<fi≤100。

by lll6924 at 「冬令營後競速放鬆賽」

最小費用最大流,因為費用和流量的平方成正比,所以要用到拆邊法。

這道題有乙個坑,就是在參與同學盡可能多的情況下,也就是說每乙個人都參加,但每乙個人的k不一定要滿流,我們能夠從每乙個人的節點向匯點連一條容量為k-1、費用為0的邊。

#include#include#include#include#include#include#include#define f(i,j,n) for(int i=j;i<=n;i++)

#define d(i,j,n) for(int i=j;i>=n;i--)

#define ll long long

#define pa pair#define maxn 300

#define maxm 50000

#define inf 1000000000

using namespace std;

struct edge_type

e[maxm];

int n,m,k,s,t,cnt=1,ans=0;

int head[maxn],dis[maxn],p[maxn],c[maxn],f[maxn];

bool inq[maxn];

char ch;

inline int read()

while (ch>='0'&&ch<='9')

return x*f;

}inline void add_edge(int x,int y,int v,int c)

;head[x]=cnt;

e[++cnt]=(edge_type);head[y]=cnt;

}inline bool spfa()

}} }

return dis[t]!=inf;

}inline void mcf() }}

int main()

s=n+m+1;t=s+1;

f(i,1,n) add_edge(s,i,k,0),add_edge(i,t,k-1,0);

f(i,1,m) f(j,1,n) add_edge(i+n,t,1,(2*j-1)*c[i]-f[i]);

mcf();

printf("%d\n",ans);

}

BZOJ3442 學習小組

先不考慮他讓參與人數最多,我們可以s連每個 量k費用0,每個人連能去的小組,流量1費用手續費,小組連t,拆邊建費用 考慮讓參與人數最多,每個人連t流量k 1費用為0,意義是在他參加了社團的情況下他可以把加入社團的機會讓給別的沒有社團的人 include include include include...

BZOJ3442 學習小組

背景 坑校準備鼓勵學生參加學習小組。描述 共有n個學生,m個學習小組,每個學生有一定的喜好,只願意參加其中的一些學習小組,但是校領導為學生考慮,規定乙個學生最多參加k個學習小組。財務處的大叔就沒那麼好了,他想盡量多收錢,因為每個學生參加學習小組都要交一定的手續費,不同的學習小組有不同的手續費。然而,...

bzoj3442 學習小組

題目大意 共有n個學生,m個學習小組,每個學生只願意參加其中的一些學習小組,但校領導規定乙個學生最多參加k個學習小組。每個學生參加學習小組都要交一定的手續費,不同的學習小組有不同的手續費。然而若有a個學生參加第i個學習小組,那麼就要給這個學習小組組織者獎勵ci a 2元。在參與學生 而不是每個學習小...