NKOI 1942 試題庫問

2021-07-16 07:13:42 字數 1717 閱讀 5547

【線性規劃與網路流24題 7】試題庫問

time limit:10000ms  memory limit:65536k

total submit:28 accepted:8 

case time limit:1000ms

description

假設乙個試題庫中有n道試題。每道試題都標明了所屬類別。同一道題可能有多個類別屬性。現要從題庫中抽取m 道題組成試卷。並要求試卷包含指定型別的試題。試設計乙個滿足要求的組卷演算法。 

程式設計任務: 

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

由於本oj無special judge , 所以只需要判斷是否存在滿足要求的組卷方案

input

檔案第1行有2個正整數k和n (2 <=k<= 20, k<=n<= 1000)k 表示題庫中試題型別總數,n 表示題庫中試題總數。 

第2 行有k 個正整數,第i 個正整數表示要選出的型別i 的題數。這k個數相加就是要選出的總題數m。 

接下來的n行給出了題庫中每個試題的型別資訊。 

每行的第1 個正整數p表明該題可以屬於p類,接著的p個數是該題所屬的型別號。

output

一行,包含乙個字串 如果存在,輸出"yes"(不包含引號), 如果不存在,輸出"no solution!"(不包含引號)

sample input

3 15

3 3 4

2 1 2

1 31 3

1 31 3

3 1 2 3

2 2 3

2 1 3

1 21 2

2 1 2

2 1 3

2 1 2

1 13 1 2 3

sample output

yes
source

感謝 wo_ai_wangyuan 修改題目並放上資料

建圖:源點和每道題連容量為1的邊,每道題與其所屬的型別連容量為1的邊,每個型別與匯點連容量為所需量的邊

跑最大流,如果maxflow==sum(sum為所需的試題數)輸出yes

#include#includeusing namespace std;

const int maxn=1005,inf=1e9;

inline void _read(int &x)

for(x=0;t>='0'&&t<='9';t=getchar())x=x*10+t-'0';

if(!sign)x=-x;

}int n,k,g[maxn][maxn+25],op,ed,maxflow;

int vd[2005],dis[2005];

int dfs(int u,int flow)

if(dis[op]>=ed)return delta;

vd[dis[u]]--;

if(vd[dis[u]]==0)dis[op]=ed;

dis[u]++;

vd[dis[u]]++;

return delta;

}int main()

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

} while(dis[op]

試題庫問題

假設乙個試題庫中有n道試題。每道試題都標明了所屬類別。同一道題可能有多個類別屬性。現要從題庫中抽取 m 道題組成試卷。並要求試卷包含 指定型別的試題。試設計乙個滿足要求的組卷演算法。對於給定的組卷要求,計算滿足要求的組卷方案。由檔案input.txt提供輸入資料。檔案第1行有2個正整數n和k 2 k...

試題庫問題

網路流24題裡面的,這題應該不算難,建圖比較簡單,就是把源點和型別連一條流量為需求題的邊,把型別和對應的題連一條流量為1的邊,把題和匯點連一條流量為1 的邊,保證每道題只用一次。然後找型別和題之間滿流的邊,表示這題在裡面。include include include include using n...

試題庫問題

題目描述 假設乙個試題庫中有n道試題。每道試題都標明了所屬類別。同一道題可能有多個類別屬性。現要從題庫中抽取m 道題組成試卷。並要求試卷包含指定型別的試題。試設計乙個滿足要求的組卷演算法。對於給定的組卷要求,計算滿足要求的組卷方案。輸入格式 第1行有2個正整數k和n 2 k 20,k n 1000 ...