網路流24題 05 圓桌聚餐(最大流判滿流)

2021-07-04 08:01:27 字數 1128 閱讀 4947

題目大意:

有m個不同單位的代表人來參加會議,每個單位的人數是確定的,會議餐廳有n張桌子,每個桌子能容納的人數也是確定的,現在希望來自乙個單位的人不在同乙個桌子上就餐,求出滿足要求的就餐方案,並輸出方案;

思路分析:

①:設立乙個源點,連向每乙個單位,流量為每個單位來參加會議的人數;

②:從每個單位向每個桌子連一條邊,流量為1,保證了每個桌子每個單位只能有乙個人;

③:設立乙個匯點,從每個桌子向匯點連一條邊,流量為每個餐桌能容納的人數;

**實現:

#include#include#include#include#define min(a,b) ((a)<(b)?(a):(b))

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

using namespace std;

const int n=430,m=33250,inf=0x3f3f3f3f;

int n,m,s,t,top,head[n],gap[n],cur[n],dis[n],pre[n];

struct edge

}edge[m];

void addedge(int from,int to,int flow)

void bfs()}}

}int sap()

}for(int i=s;i!=t;i=edge[cur[i]].to)

max_flow+=cur_flow;

u=neck;

}int i;

for(i=cur[u];i+1;i=edge[i].next)

if(edge[i].flow&&dis[u]==dis[edge[i].to]+1) break;

if(i!=-1)else

dis[u]=mindis+1;

gap[dis[u]]++;

if(u!=s) u=pre[u];}}

return max_flow;

}int main()

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

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

int res=sap();

if(res

網路流24題 圓桌聚餐 (最大流)

假設有來自 n n 個不同單位的代表參加一次國際會議。每個單位的代表數分別為 ri r i 會議餐廳共有 m m 張餐桌,每張餐桌可容納 ci c i 個代表就餐。為了使代表們充分交流,希望從同乙個單位來的代表不在同乙個餐桌就餐。試設計乙個演算法,給出滿足要求的代表就餐方案。最大流 include ...

LibreOJ 6004 圓桌聚餐 最大流

題解 天啊,這道最大流真是水的一批 只需要每張桌子向每個單位建一條容量為1的邊,源點向桌子建邊,容量為桌子能坐的人數 單位向匯點建邊,容量為單位人數即可,然後根據單位與桌子的連邊值是否為一來了解每個單位配對的桌子即可 如下 include include include include includ...

網路流24題5 圓桌問題

假設有來自 n 個不同單位的代表參加一次國際會議。每個單位的代表數分別為ri 會議餐廳共有 m 張餐桌,每張餐桌可容納ci 個代表就餐。為了使代表們充分交流,希望從同乙個單位來的代表不在同乙個餐桌就餐。試設計乙個演算法,給出滿足要求的代表就餐方案。對於給定的代表數和餐桌數以及餐桌容量,程式設計計算滿...