C 之路高階 bzoj2879(美食節)

2022-08-02 22:21:17 字數 2049 閱讀 4319

time limit: 10 sec  memory limit: 512 mb

submit: 1304  solved: 702

[submit][status][discuss]

輸入檔案的第1行包含兩個正整數n和m,表示菜品的種數和廚師的數量。 第2行包含n個正整數,其中第i個數為pi,表示點第i種菜品的人數。 接下來有n行,每行包含m個非負整數,這n行中的第i行的第j個數為ti,j,表示第j個廚師製作第i種菜品所需的時間。 輸入檔案中每行相鄰的兩個數之間均由乙個空格隔開,行末均沒有多餘空格。

輸出僅一行包含乙個整數,為總等待時間的最小值。

3 2

3 1 1

5 7

3 6

8 947

【樣例說明】

廚師1先製作1份菜品2,再製作2份菜品1。點這3道菜的3個同學的等待時間分別為3,3+5=8,3+5+5=13。

廚師2先製作1份菜品1,再製作1份菜品3。點這2道菜的2個同學的等待時間分別為7,7+9=16。

總等待時間為3+8+13+7+16=47。

雖然菜品1和菜品3由廚師1製作更快,如果這些菜品都由廚師1製作,總等待時間反而更長。如果按上述的做法,將1份菜品1和1份菜品3調整到廚師2製作,這樣廚師2不會閒著,總等待時間更短。

可以證明,沒有更優的點餐方案。

【資料規模及約定】

對於100%的資料,n <= 40, m <= 100, p <= 800, ti,j <= 1000(其中p = ∑pi,即點菜同學的總人數)。

每組資料的n、m和p值如下:

測試點編號 n m p

1 n = 5 m = 5 p = 10

2 n = 40 m = 1 p = 400

3 n = 40 m = 2 p = 300

4 n = 40 m = 40 p = 40

5 n = 5 m = 40 p = 100

6 n = 10 m = 50 p = 200

7 n = 20 m = 60 p = 400

8 n = 40 m = 80 p = 600

9 n = 40 m = 100 p = 800

10 n = 40 m = 100 p = 800

題解:動態建邊

**:

1 #include2 #include3 #include4 #include5 #include6

#define maxn 100005

7#define t 10000189

using

namespace

std;

1011

int ans,n,tot,m,dis[maxn],head[maxn],cnt=1,c[45],t[45][105],inq[maxn],from[maxn],que[10*maxn];

1213

struct ss e[3000005

];14

15void add(int u,int v,int c,int

w)16

2425

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

w)

2630

31bool

spfa()

3250 inq[now]=0

; 51}

52if (dis[t]==0x7fffffff) return0;

53else

return

1; 54}

5556

void

mcf()

5764}65

for (int i=from[t];i;i=from[e[i].from

])66 70

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

71 insert((a-1)*tot+b,m*tot+i,b*t[i][a],1

);

72}

7374

intmain()

75

BZOJ2879 美食節(費用流)

bzoj 洛谷一眼就會思路了吧。把每個廚師拆點,拆分為他最多能要做的菜的個數,即 p i pi 然後把每個菜向廚師的每個點連邊,表示這個菜是這個廚師做的第幾個菜。考慮一下這個菜放在這個位置對於後面所有位置的影響就好了。然後跑費用流就好了。經蘿蔔提醒,上面這個東西就是scoi2007修車那道題目 然而...

BZOJ 2879 美食節(費用流 動態加邊)

題意 有n道菜,每道菜需要b i 份,m個廚師,第j個廚師做第i道菜需要時間a i j 求做完所有菜,所有人等待的最小總時間。思路 設所有的菜為sum。乙個明顯的思路是將每個廚師拆成sum個點。然後sum個菜每個菜向每個廚師的每個點連邊,表示該道菜為該廚師第幾個做。由於這樣資料太大。動態加邊。每次增...

C 之路高階 bzoj2199(奶牛議會)

f.a.qs home discuss problemset status ranklist contest modifyuser gryz2016 logout 捐贈本站 notice 由於本oj建立在linux平台下,而許多題的資料在windows下製作,請注意輸入 輸出語句及資料型別及範圍,避...