description
小r最近遇上了**煩,他的程式設計掛科了。於是他只好找程設老師求情。善良的程設老師答應不掛他,但是要input求小r幫助他一起解決乙個難題。問題是這樣的,程設老師最近要進行一項**的實驗來證明p=np,這個實驗一共
持續n天,第i天需要a[i]個研究生來給他搬磚。研究生畢竟也是人,所以僱傭研究生是需要錢的,機智的程設老師
已經聯絡好了m所大學,第j所大學共有l[j]個研究生,同時僱傭這所大學的乙個研究生需要p[j]元錢。本來程設老
師滿心歡喜的以為,這樣撿最便宜的max個研究生雇來,就可以完成實驗;結果沒想到,由於他要求碩士生
們每天工作25個小時不許吃飯睡覺上廁所喝水說話咳嗽打噴嚏呼吸空氣,因此一天下來給他搬磚的所有研究生都會
進入瀕死狀態。瀕死狀態的研究生,毫無疑問,就不能再進行工作了。但是機智的老師早早聯絡好了k家醫院,第i
家醫院醫治乙個瀕死的研究生需要d[i]天,並且需要q[i]元錢。現在,程設老師想要知道,最少花多少錢,能夠在
這n天中滿足每天的需要呢?若無法滿足,則請輸出」impossible」。注意,由於程設老師良心大大的壞,所以他
是可以不把瀕死的研究生送去醫院的!。
本題包含多組資料;第一行是乙個數t(t<=11),表示資料組數,以下t組資料。 對於每一組資料,第一行三個數,n,m,k;output以下一行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.
對於每組資料以樣例的格式輸出一行,兩個數分別表示第幾組資料和最少錢數。sample input
3 2 1sample output10 20 30
40 90 15 100
1 53 2 1
10 20 30
40 90 15 100
2 5
case 1: 4650hintcase 2: impossible
樣例解釋:題解買下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的最大流 ...