Jzoj P4371 作業分配

2021-08-21 10:54:12 字數 2586 閱讀 2388

n n

科作業,第

i' role="presentation" style="position: relative;">i

i科作業有ai

a

i份,有

m m

個人,第

j' role="presentation" style="position: relative;">j

j個人只做其中任意bj

b

j份作業,我們知道第

j j

個人做乙份第

i' role="presentation" style="position: relative;">i

i科作業的時間是ci

,jc i,

j。

問所有人做作業的總時間的和最小值是多少。∑n

i=1a

i=∑m

j=1b

j ∑i=

1nai

=∑j=

1mbj

n<=

200,

m<=

200,ai

,bi<=

10000,s

um(a

i)<=

1000000

n

<=

200,

m<=

200,ai

,b

i<=

10000,s

um(a

i)

<=

1000000

很容易想到費用流, 源點s

s

向所有科目連邊,費用為

0' role="presentation" style="position: relative;">0

0,流量為a[

i]a [i

]每科向每人連邊,費用為c[

i][j

] c[i

][j]

,流量為a[

i]a [i

]每人向匯點

t t

連邊,費用為

0' role="presentation" style="position: relative;">0

0,流量為b[

j]b [j

]但是會超時,

所以我們考慮動態加邊,

在之前加入的最短邊滿流後才加的邊

也就是說我們一開始對第

i i

科只向做這科需要最短時間的人

j' role="presentation" style="position: relative;">j

j連邊 當j

j

到匯點t' role="presentation" style="position: relative;">t

t的邊滿流時,我們就加入做這科需要時間次短的人,以此類推,當然當下一次加入的人

k k

到匯點t' role="presentation" style="position: relative;">t

t的邊依然滿流的時候,

i i

到k' role="presentation" style="position: relative;">k

k的邊也不能忽略不加,因為網路流中是有反悔邊的,所以這條邊可能會使結果更優。

#include

#include

#include

#include

#include

#define inf 2333333

#define m 100005

#define n 505

using

namespace

std;

struct edge e[m*2];

struct node c[n][n];

int incf[n], tot[n], flow[n], dis[n], pre[n], ls[n], v[n], a[n], b[n], n, m, maxflow, ans, cnt = 1;

void addedge(int u, int v, int w, int f)

bool cmp(node aa, node bb)

bool spfa(int s, int t)

}v[u] = 0;

}return dis[t] != inf;

}void update(int s, int t)

maxflow += incf[t];

ans += dis[t]*incf[t];

}void edmonds_karp(int s, int t)

}}int main()

for (int i = 1; i <= n; i++) addedge(s, i, a[i], 0);

for (int i = 1; i <= m; i++) addedge(n+i, t, b[i], 0), flow[i] = cnt - 1;

edmonds_karp(s, t);

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

return

0;}

作業分配(回溯法)

有n份作業分配給n個人去完成,每人完成乙份作業。假定第i個人完成第j份作業需要花費cij時間,cij 0,1 i,j n。試設計乙個回溯演算法,將n份作業分配給n個人完成,使得總花費時間最短。c 實現 author qinwu created time 2017 4 30 22 45 25 file...

費用流 作業分配

暑假裡,總有某些同學由於貪玩而忘記做作業。這些人往往要等到暑假快結束時才想起堆積如山的作業,但在這最後幾天的時間裡把這些作業做完已經不太現實了,於是 志同道合 的他們想出了乙個妙招。假設現在有n科作業,他們把第i科作業按作業量平均分成ai份,他們總共有m個人,第j個人只願意做其中任意的bj份作業,而...

團隊作業分數的分配

根據討論結果,團隊作業分數的分配方案已經確定,一共7個人,首先每個人有10 的基本得分,然後在專案完成時進行會議討論,每個人陳述自己的工作情況,根據每個人實際的工作量,完成情況和完成的質量和效率等方面通過小組內互評的方式決定剩餘30 分數的分配方案,並在基本分數上增加或減少。1.組員的分工及實際工作...