傳送門:洛谷-試題庫問題
假設乙個試題庫中有n道試題。每道試題都標明了所屬類別。同一道題可能有多個類別屬性。現要從題庫中抽取m 道題組成試卷。並要求試卷包含指定型別的試題。試設計乙個滿足要求的組卷演算法。
對於給定的組卷要求,計算滿足要求的組卷方案。
第1行有2個正整數k和n (2 <=k<= 20, k<=n<= 1000)
k 表示題庫中試題型別總數,n 表示題庫中試題總數。第2 行有k 個正整數,第i 個正整數表示要選出的型別i的題數。這k個數相加就是要選出的總題數m。接下來的n行給出了題庫中每個試題的型別資訊。每行的第1 個正整數p表明該題可以屬於p類,接著的p個數是該題所屬的型別號。
第i 行輸出 「i:」後接型別i的題號。如果有多個滿足要求的方案,只要輸出1個方案。如果問題無解,則輸出「no solution!」。
網路流建模問題。
我們先建立乙個源點和乙個匯點。
然後在每個型別號與源點之間連一條容量為要求題數的有向邊。
對於每一道題,我們在該題與對應型別號之間連一條容量為1的有向邊,並在該題與匯點之間也連一條容量為1的有向邊。
接著跑最大流,一定要源點出發的每條邊都流滿了才有解。
#include
#include
#include
#include
#include
#define inf 0x7fffffff
using
namespace
std;
const
int n=2e6+10;
int t[22],head[n],to[n],nxt[n],w[n],flow[n];
int d[n],n,k,cnt,t=2e5,dir[n],vis[1002];
queue
q;inline
int read()
while(ch>='0' && ch<='9')
return x*t;
}inline
void link(int u,int v,int cap)
inline
bool bfs()}}
if(d[t]==-1) return
false;
return
true;
}inline
int min(int x,int y)
inline
int dfs(int st,int ed,int f)}}
if(tot==0) d[st]=-1;
return tot;
}inline
void solve()
inline
bool check()
return
true;
}inline
void print()
}printf("\n");
}}int main()
for(int i=1;i<=n;i++)
}solve();
if(!check())
print();
return
0;}
試題庫問題(網路流)
假設乙個試題庫中有 n n 道試題。每道試題都標明了所屬類別。同一道題可能有多個類別屬性。現要從題庫中抽取 m role presentation m m道題組成試卷。並要求試卷包含指定型別的試題。試設計乙個滿足要求的組卷演算法。對於給定的組卷要求,計算滿足要求的組卷方案。第1 1 行有2 role...
網路流24題 試題庫問題
網路流24題大多需要spj,所以需要乙個有spj的oj,本系列 均在www.oj.swust.edu.cn測試通過 這道題的模型很顯然,源點向每個試卷連線一條容量為1的邊,每個試卷向對應的型別連線一條容量為一的邊,每個型別向匯點連線一條容量為需要數量的邊,跑一邊最大流即可。include inclu...
網路流24題 試題庫問題
傳送門 這個題好像比較水。每個種類向匯點連容量為所需求的數量的邊 然後每個試題向可以選的種類連容量為1的邊 再從源點向每個試題連容量為1的邊,然後dinic 過程中記錄一下轉移的目標節點,然後輸出路徑就好了 判無解不用我說了吧。include include include include incl...