bzoj3280 小R的煩惱

2021-08-04 07:50:15 字數 2504 閱讀 6224

description

小r最近遇上了**煩,他的程式設計掛科了。於是他只好找程設老師求情。善良的程設老師答應不掛他,但是要求小r幫助他一起解決乙個難題。

問題是這樣的,程設老師最近要進行一項**的實驗來證明p=np,這個實驗一共持續n天,第i天需要a[i]個研究生來給他搬磚。研究生畢竟也是人,所以僱傭研究生是需要錢的,機智的程設老師已經聯絡好了m所大學,第j所大學共有l[j]個研究生,同時僱傭這所大學的乙個研究生需要p[j]元錢。

本來程設老師滿心歡喜的以為,這樣撿最便宜的max個研究生雇來,就可以完成實驗;結果沒想到,由於他要求碩士生們每天工作25個小時不許吃飯睡覺上廁所喝水說話咳嗽打噴嚏呼吸空氣,因此一天下來給他搬磚的所有研究生都會進入瀕死狀態。瀕死狀態的研究生,毫無疑問,就不能再進行工作了。但是機智的老師早早聯絡好了k家醫院,第i家醫院醫治乙個瀕死的研究生需要d[i]天,並且需要q[i]元錢。

現在,程設老師想要知道,最少花多少錢,能夠在這n天中滿足每天的需要呢?若無法滿足,則請輸出」impossible」。注意,由於程設老師良心大大的壞,所以他是可以不把瀕死的研究生送去醫院的!

input

本題包含多組資料;第一行是乙個數t(t<=11),表示資料組數,以下t組資料。
對於每一組資料,第一行三個數,n,m,k;

以下一行n個數,表示a[1]…a[n]

接著一行2m個數,表示l[1],p[1]…l[n],p[n]

接著一行2k個數,表示d[1],q[1]…d[n],q[n]

output

對於每組資料以樣例的格式輸出一行,兩個數分別表示第幾組資料和最少錢數。

sample input

2 3 2 1

10 20 30

40 90 15 100

1 5

3 2 1

10 20 30

40 90 15 100

2 5

sample output

case 1: 4650

case 2: impossible

hint

樣例解釋:買下90塊錢的那40個研究生,另外再買10個100塊錢的。這樣,第一天用完的10個人全部送到醫院,那麼他們在第三天可以繼續使用;同時,第二天和第三天都用新的研究生來彌補,這樣一共需要花費40*90 + 10*100 + 5*10 = 4650元。

資料規模:

對於30%的資料中的每組資料,

滿足n<=5,m,k<=2,其餘數均小於等於100或者

n<=10,m,k<=10,其餘數均小於等於20.

對於100%的資料

n,m,k<=50,其餘數均小於等於100.

題解 與bzoj1221類似。

將每天拆成兩個集合,xi表示健康的人,yi表示生病的人

源點->yi 容量為a[i],費用為0 因為一天最多產生a[i]個病人

xi->匯點 容量為a[i],費用為0

yi->xi+d[x] 容量為inf ,費用為q[i]

源點->每個大學 容量為l[i] ,費用為0

每個大學->x集合中的每個點 容量為inf ,費用為p[i]

xi->xi+1 容量為inf ,費用為0

**

#include

#define ll long long

#define inf 0x7fffffff

#define mod 1000000007

using

namespace

std;

inline

int read()

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

return x*f;

}int n,m,k,ans2,ans1,sum,tot,s,t;

int from[2005],q[2005],dis[2005],head[2005];

bool vis[2005];

struct datae[1000001];

inline

void ins(int u,int v,int w,int c)

inline

void insert(int u,int v,int w,int c)

inline

bool spfa()

}vis[now]=0;

}if (dis[t]==inf)return

0;return1;}

void mcf()

i=from[t];ans1+=x;

while (i)

}int main()

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

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

ans1=ans2=0;

while (spfa()) mcf();

if (ans1!=sum) puts("impossible");else

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

}return

0;}

bzoj 3280 小R的煩惱

題意 n天,m個學校,k個醫院。每天需要a i 個人,這a i 個人工作後處於瀕死狀態,你可以選擇把瀕死狀態的人送去醫院,治好後還可以繼續工作。每個醫院i救治乙個人需要d i 天,費用q i 元。學校 i 中乙個人工作一天薪酬為p i 思路 時間為乙個天然序,第i天的決策為從健康的人中選擇a i 個...

小R的煩惱 BZOJ3280

分析 一開始一直wa,發現是建圖建錯了,必須得拆點。s連i,流量為a i 費用為0,i n連t,流量同上,費用為0,之後i連i 1費用為0,流量為inf,之後s連n 2 i,流量為li,費用為0,之後列舉j從1到n,n 2 i連線j n,費用為p i 之後i連線i d i 1,費用為q i 流量為i...

bzoj3280 小R的煩惱(費用流)

題目傳送門 解法 一開始yy了個建圖。完全沒毛病。結果不知道怎麼判impossible了。很尷尬。每天分成兩個點。乙個點x表示今天收到多少個活人。乙個點y表示多少個瀕死的人。今天僱的人一定會用。所以變成死人。大學連y,容量無限費用q i 每天最多a i 個死人。st連y容量a i 費用0 每天最多a...