bzoj3280 網路流 費用流 小R的煩惱

2021-08-18 15:30:27 字數 2783 閱讀 7427

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] n,m,k<=50,其餘數均小於等於100.

output

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

sample input

3 2 1

10 20 30

40 90 15 100

1 53 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元。

題解

看資料猜標程系列

n,m,k<=50當然費用流啊

把每天拆成兩個點xi,yi,表示健康的人,生病的人

那麼st->yi,流量a[i],費用0,表示這天肯定會多出來這麼多生病的人

xi->ed,流量a[i],費用0,表示這天需要的人

st->每個大學,流量l[i],費用0

每個大學->xi,流量inf,費用p[i]

yi->每個能救回來的xi,流量inf,費用q[i]

xi->xi+1,流量inf,費用0

費用流即可

#include

#include

#include

#include

#include

using

namespace

std;

struct node

a[210000];int len,last[510];

void ins(int x,int y,int c,int d)

bool v[510];

int d[510],list[111000],head,tail;

int pre[510],tmp[510],st,ed;

int n,m,k;

bool spfa()}}

head++;if(head==n*2+m+3)head=1;

v[x]=false;

}if(d[ed]<1061109567)return

true;

return

false;

}int cnt;

int mcf()

ret+=d[ed]*minn;

num+=minn;

x=ed;

while(x!=st)

}if(num==cnt)return ret;

else

return -1;

}int ct[60],day[60],sum[60];

int rk[110];

int main()

for(int i=1;i1,999999999,0);

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

memset(rk,63,sizeof(rk));

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

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

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

int q=mcf();

if(q!=-1)printf("case %d: %d\n",tt,q);

else

printf("case %d: impossible\n",tt);

}return

0;}

bzoj3280 小R的煩惱(費用流)

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

bzoj1834(網路流 費用流)

給定一張有向圖,每條邊都有乙個容量c和乙個擴容費用w。這裡擴容費用是指將容量擴大1所需的費用。求 1 在不擴容的情況下,1到n的最大流 2 將1到n的最大流增加k所需的最小擴容費用。第一問裸的網路流 第二問 新建乙個匯點,將n號點與匯點相連,容量為k,限制最多增大的流量 費用為0 將原先每一條邊都新...

bzoj1834 網路流加費用流

time limit 3 sec memory limit 64 mb submit 2390 solved 1206 submit status discuss 給定一張有向圖,每條邊都有乙個容量c和乙個擴容費用w。這裡擴容費用是指將容量擴大1所需的費用。求 1 在不擴容的情況下,1到n的最大流 ...