3442 學習小組

2021-07-26 11:24:52 字數 2075 閱讀 8983

time limit: 5 sec  

memory limit: 128 mb

submit: 380  

solved: 181 [

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 「冬令營後競速放鬆賽」 [

submit][

status][

discuss]

對於每個學生,與學習小組建立費用為手續費的邊,從s向他連容量為k的邊,從他向t連容量為1的邊

這樣就轉換成了乙個最小費用最大流模型,與s,t的連邊保證了下界1上界k的限制

問題在於,獎勵的費用是與流量平方成正比,不能考慮按普通方式建圖

對於第i個學習小組,向t連n條邊,第i條邊的費用為(2 * i - 1) * ci

因為是最小費用流,所以邊肯定是從小到大走,而這樣的累計和剛好是與流量平方成正比

#include#include#include#include#includeusing namespace std;

const int maxn = 233;

const int maxm = 2e6 + 20;

const int inf = ~0u>>1;

struct e

e(int to,int cap,int flow,int cost): to(to),cap(cap),flow(flow),cost(cost){}

}edgs[maxm];

int n,m,k,cnt,s,t,f[maxn],from[maxn],a[maxn],cost[maxn];

bool vis[maxn];

vector v[maxn];

queue q;

int getint()

int get()

void add(int x,int y,int cap,int cost)

bool spfa()}}

return cost[t] != inf;}

int main()

for (int i = 1; i <= m; i++) f[i] = getint();

for (int i = 1; i <= n; i++)

for (int j = 1; j <= m; j++)

int ans = 0;

while (spfa())

}cout << ans << endl;

return 0;

}

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元。在參與學生 而不是每個學習小...