教輔的組成

2022-05-01 05:57:06 字數 1871 閱讀 6020

滾粗了的hansbug在收拾舊語文書,然而他發現了什麼奇妙的東西。

蒟蒻hansbug在一本語文書裡面發現了一本答案,然而他卻明明記得這書應該還包含乙份練習題。然而出現在他眼前的書多得數不勝數,其中有書,有答案,有練習冊。已知乙個完整的書冊均應該包含且僅包含一本書、一本練習冊和乙份答案,然而現在全都亂做了一團。許多書上面的字跡都已經模糊了,然而hansbug還是可以大致判斷這是一本書還是練習冊或答案,並且能夠大致知道一本書和答案以及一本書和練習冊的對應關係(即僅僅知道某書和某答案、某書和某練習冊有可能相對應,除此以外的均不可能對應)。既然如此,hansbug想知道在這樣的情況下,最多可能同時組合成多少個完整的書冊。

輸入格式:

第一行包含三個正整數n1、n2、n3,分別表示書的個數、練習冊的個數和答案的個數。

第二行包含乙個正整數m1,表示書和練習冊可能的對應關係個數。

接下來m1行每行包含兩個正整數x、y,表示第x本書和第y本練習冊可能對應。(1<=x<=n1,1<=y<=n2)

第m1+3行包含乙個正整數m2,表述書和答案可能的對應關係個數。

接下來m2行每行包含兩個正整數x、y,表示第x本書和第y本答案可能對應。(1<=x<=n1,1<=y<=n3)

輸出格式:

輸出包含乙個正整數,表示最多可能組成完整書冊的數目。

輸入樣例#1:

5 3 4

54 3

2 25 2

5 15 3

51 3

3 12 2

3 34 3

輸出樣例#1:

2
樣例說明:

如題,n1=5,n2=3,n3=4,表示書有5本、練習冊有3本、答案有4本。

m1=5,表示書和練習冊共有5個可能的對應關係,分別為:書4和練習冊3、書2和練習冊2、書5和練習冊2、書5和練習冊1以及書5和練習冊3。

m2=5,表示數和答案共有5個可能的對應關係,分別為:書1和答案3、書3和答案1、書2和答案2、書3和答案3以及書4和答案3。

所以,以上情況的話最多可以同時配成兩個書冊,分別為:書2+練習冊2+答案2、書4+練習冊3+答案3。

資料規模:

(它本來就崩了。)

對於資料點1, 2, 3,m1,m2<= 20

對於資料點4~10,m1,m2 <= 20000

思路:網路流構圖+最大流+拆點

一開始,我是把s與書相連,書與教輔相連,然後教輔與答案相連,然後w0了。

因為,教輔也只有乙份的,所以還要教輔與教輔相連。

然後又w10了,因為,書才是承上啟下的。

**實現:

1 #include2 #include3

const

int inf=1e8;

4const

int maxn=80000;5

const

int maxm=800000;6

intn1,n2,n3,m1,m2,s,t,ans;

7int

a,b,c;

8 inline int min_(int x,int y)

9int h[maxn],hs=1;10

struct edgee[maxm];

11void add(int q,int

z),h[q]=hs;

13 e[++hs]=(edge),h[z]=hs;14}

15int

d[maxn],q[maxn],head,tail;

16void

bfs()28}

29}30int ap(int k,int

w)40

return w-uw;41}

42void dinic()

43int

main()

題解 教輔的組成

題目戳我 text 顯然是乙個類似於二分圖,實際上卻有三部分的圖的 最大匹配 顯然,我們可以想到書向練習冊,練習冊向答案的建圖方式。但這樣顯然是錯的。因為每冊練習冊被用到了多次。鑑於題目中給出的是書向某物的關係,我們就讓書當作圖中最中間的一排點。即 練習冊 to 書 to 答案。為了保證書只用一次,...

LuoguP1231 教輔的組成

題目鏈結 蒟蒻hansbug在一本語文書裡面發現了一本答案,然而他卻明明記得這書應該還包含乙份練習題。然而出現在他眼前的書多得數不勝數,其中有書,有答案,有練習冊。已知乙個完整的書冊均應該包含且僅包含一本書 一本練習冊和乙份答案,然而現在全都亂做了一團。許多書上面的字跡都已經模糊了,然而hansbu...

P1231 教輔的組成

題目 啊,又是煩人的拆點,其實網路瘤一堆題都是拆點,本題顯然要把書,練習冊 53 答案 學生的福音 分開,但是,書作為中轉的地方,是具有唯一性的,不能2本53都配同一本書,這時我們還需要用拆點思想保障書是唯一的。code include include include include include...