洛谷 試題庫問題 網路流

2021-08-17 14:56:35 字數 1573 閱讀 3361

傳送門:洛谷-試題庫問題

假設乙個試題庫中有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...