網路流24題 試題庫問題

2021-08-27 23:41:34 字數 1224 閱讀 9565

二分圖多重匹配問題,用最大流解決。

建立二分圖,每個題為x集合中的頂點,每個類別為y集合中的頂點,增設附加源s和匯t。

1、從s向每個xi連線一條容量為1的有向邊。

2、從每個yi向t連線一條容量為該類別所需數量的有向邊。

3、如果乙個題i屬於乙個類別j,連線一條從xj到yi容量為1的有向邊。

求網路最大流,如果最大流量等於所有類別所需之和,則存在解,否則無解。對於每個類別,從x集合對應點出發的所有滿流邊,指向的b集合中的頂點就是該類別的所選的題(乙個可行解)。

二分圖多重匹配問題。x,y集合之間的邊容量全部是1,保證兩個點只能匹配一次,源匯的連邊限制了每個點匹配的個數。求出網路最大流,如果流量等於y集合所有點與t邊容量之和,那麼則說明y集合每個點都有完備的多重匹配。

#include using namespace std;

const int maxn = 3005;

const int maxm = 3005;

const int inf = 0x3f3f3f3f;

struct edge1

;struct dinic

edges.clear();

} void addedge(int from,int to,int cap)

); edges.push_back((edge1));

m = edges.size();

g[from].push_back(m - 2);

g[to].push_back(m - 1);

} bool bfs()

}} return vis[t];

} int dfs(int x,int a)

}return flow;

} int maxflow(int s,int t)

return flow;

}}din;

vectorans[maxn];

int main(void)

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

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

if(sum == din.maxflow(s,t))

}for(int i = 1; i <= k; i++)

printf("\n");}}

else printf("no solution!\n");

return 0;

}

網路流24題 試題庫問題

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

網路流24題 試題庫問題

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

網路流24題 試題庫問題

有 k k 種型別和 n role presentation n n個題目,每個題目會適應部分型別,一種型別可能需要多種題,一道題可能多種型別都需要,但一道題只能滿足一種型別,現要求出滿足出完所有型別的題目的方案 網路流擅長於解決各種有要求的匹配,顯然這道題是有條件的匹配,可以用最大流來解決。首先建...