【線性規劃與網路流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 153 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
yessource
感謝 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 ...