網路流24題 試題庫問題

2021-08-20 22:30:49 字數 1186 閱讀 4046

k k

種型別和

n' role="presentation">n

n個題目,每個題目會適應部分型別,一種型別可能需要多種題,一道題可能多種型別都需要,但一道題只能滿足一種型別,現要求出滿足出完所有型別的題目的方案

網路流擅長於解決各種有要求的匹配,顯然這道題是有條件的匹配,可以用最大流來解決。

首先建立超源點和超匯點,源點與試題相連,匯點與型別相連,對應試題與對應型別相連

現在我們來考慮邊的容量

因為一道題只可以有乙個,所以源點和試題的邊的容量為1

同理一道題只能滿足一種型別,所以試題和型別的邊的容量也為1

而需要滿足的型別是有多個的,所以型別與匯點的邊的容量為所需型別的數量

如圖

這時跑最大流即可

統計方案只需找到沒有被割掉的邊(可能有人不懂什麼是被割掉,因為最大流=最小割)。然後輸出其即可,需要注意的是,輸出的不能是匯點

#include

#include

#include

#define m 8005

#define min(a,b) a#define max(a,b) a>b?a:b

using

namespace

std;int f,n,k,s,t,num[21],sum;char c;

int read()

void write(int x)

struct nodee[m];

int l[m],tot,d[m];

void add(int u,int v, int w)

bool bfs()}}

return

false;

}int dfs(int x,int flow)

}if(!rest) d[x]=-1;

return rest;

}int dinic()

int main()

add(s,i,1);

}if(dinic()return

printf("no solution!")&0;

for(int i=1;i<=k;putchar(10),i++)

}

網路流24題 試題庫問題

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

網路流24題 試題庫問題

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

網路流24題 試題庫問題

luogu 2763 現在要編組m套試卷m,給出每套試卷要出幾道題。試題庫裡有n道題目,並給出每道題目可以出在哪些試卷上。求解一種組卷的方案,無方案則輸出無解。如不知道網路流的話可以把每套試卷拆成題所需數個點,連邊跑二分圖。不過這樣處理比較麻煩,時間複雜度能不能接受我也沒試 用網路流解決更直觀簡單。...