BZOJ3442 學習小組

2022-05-03 23:15:13 字數 2128 閱讀 3408

【背景】

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

【描述】

共有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。

費用流建模題。。。

因為ci*a^2不好處理,我們可以將其拆成費用為ci、3ci、5ci、7ci、(2n-1)ci這n條邊,由數列的基本知識可以證明這是對的。

因為要求參與的人數最多,我們可以先新增一條費用為-inf的有向邊,最後再加回來。

之後的建模就簡單了,見code吧。

#include#include

#include

#include

#include

#include

#define rep(i,s,t) for(int i=s;i<=t;i++)

#define dwn(i,s,t) for(int i=s;i>=t;i--)

#define ren for(int i=first[x];i!=-1;i=next[i])

using

namespace

std;

inline

intread()

typedef

long

long

ll;const

int maxn=310

;const

int maxm=200010

;const

int inf=1e9;

struct

zkw edges[maxm];

void init(int

n)

void addedge(int u,int v,int

w,ll c) ;next[m]=first[u];first[u]=m++;

edges[m]=(edge);next[m]=first[v];first[v]=m++;

}intq[maxn];

intbfs() } }

}rep(i,

0,m-1) edges[i].cost+=d[edges[i].to]-d[edges[i].from];cost+=d[s];

return cost<0

; }

int dfs(int x,int

a)

int f,flow=0;vis[x]=1

; ren

}return

flow;

}ll solve(

int s,int

t) }sol;

intc[maxn],f[maxn];

char

s[maxn];

intmain()

ll sum=0

; rep(i,

1,n)

printf(

"%lld\n

",sol.solve(s,t)+sum);

return0;

}

view code

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