網路流24題 試題庫問題

2021-09-25 11:26:25 字數 1974 閱讀 8958

網路流

題目描述

假設乙個試題庫中有n

nn道試題。每道試題都標明了所屬類別。同一道題可能有多個類別屬性。現要從題庫中抽取m

mm 道題組成試卷。並要求試卷包含指定型別的試題。試設計乙個滿足要求的組卷演算法。

對於給定的組卷要求,計算滿足要求的組卷方案。

輸入輸出格式

輸入格式:

第1

11行有2

22個正整數k

kk和nnn(

2<=k

<=20

,k

<=n

<

=1000

)(2<=k<=20, k<=n<=1000)

(2<=k

<=2

0,k<=n

<=1

000)kk

k 表示題庫中試題型別總數,n

nn 表示題庫中試題總數。第2

22 行有k

kk 個正整數,第i

ii 個正整數表示要選出的型別i的題數。這k

kk個數相加就是要選出的總題數m

mm。接下來的n

nn行給出了題庫中每個試題的型別資訊。每行的第1

11 個正整數p

pp表明該題可以屬於p

pp類,接著的p

pp個數是該題所屬的型別號。

輸出格式:

第i

ii 行輸出 「i:

」「i:」

「i:」

後接型別i

ii的題號。如果有多個滿足要求的方案,只要輸出1

11個方案。如果問題無解,則輸出「no solution!」。

s

ss到試題型別連一條容量為所選題數的邊,試題型別到試題編號連容量為1

11的邊,試題編號到t

tt連容量為1

11的邊,跑最大流,最後掃瞄殘量網路得出解。

#include.h>

using namespace std;

int first[

10005

],nxt[

10005

],to[

10005

],w[

10005

],dep[

10005

],cnt[

10005

],s,t,tot=

1,n,k,cnt=0;

int ans[25]

[1005

],ind[25]

;int read()

while

(isdigit

(ch)

)return x*f;

}void

add(int x,int y,int z)

void

bfs(int s)}

}}int mf=0;

int dfs

(int p,int f)

int u=0;

for(int e=first[p]

;e;e=nxt[e])if

(u==f)

return u;}}

if(!--cnt[dep[p]])

++cnt[

++dep[p]];

return u;

}void

bfs2()

while

(!q.

empty()

)}}}

signed main()

for(int i=

1;i<=n;i++)}

for(int i=

1;i<=n;i++

)bfs

(t);

while

(dep[s]

if(mfbfs2()

;for

(int i=

1;i<=k;i++

) cout<}return0;

}

網路流24題 試題庫問題

網路流24題大多需要spj,所以需要乙個有spj的oj,本系列 均在www.oj.swust.edu.cn測試通過 這道題的模型很顯然,源點向每個試卷連線一條容量為1的邊,每個試卷向對應的型別連線一條容量為一的邊,每個型別向匯點連線一條容量為需要數量的邊,跑一邊最大流即可。include inclu...

網路流24題 試題庫問題

傳送門 這個題好像比較水。每個種類向匯點連容量為所需求的數量的邊 然後每個試題向可以選的種類連容量為1的邊 再從源點向每個試題連容量為1的邊,然後dinic 過程中記錄一下轉移的目標節點,然後輸出路徑就好了 判無解不用我說了吧。include include include include incl...

網路流24題 試題庫問題

有 k k 種型別和 n role presentation n n個題目,每個題目會適應部分型別,一種型別可能需要多種題,一道題可能多種型別都需要,但一道題只能滿足一種型別,現要求出滿足出完所有型別的題目的方案 網路流擅長於解決各種有要求的匹配,顯然這道題是有條件的匹配,可以用最大流來解決。首先建...