P3254 圓桌問題 題解

2021-10-05 08:55:23 字數 1234 閱讀 8185

題目鏈結

一道模板的帶權二分圖匹配

工作單位和餐桌分別為該二分圖的兩組點

最後,如果最大匹配小於人數總和,說明沒有滿足要求的就餐方案,輸出 0

00否則就輸出方案

#include

#include

#include

#include

using

namespace std;

const

int maxn=

520,maxm=

100000

,inf=

0x3f3f3f3f

;int nxt[maxm]

,to[maxm]

,d[maxn]

;int flow[maxm]

,head[maxn]

;int n,m,s,t,ans;

int edgecnt=

1,tot;

inline

intread()

while

(ch>=

'0'&& ch<=

'9')s=

(s<<3)

+(s<<1)

+(ch^48)

,ch=

getchar()

;return s*w;

}inline

void

add(

int x,

int y,

int c)

bool

bfs()}

return0;

}int

dinic

(int x,

int cur)

return cur-ret;

}int

main()

for(

int i=n+

1;i<=m+n;

++i)

int tmp;

while

(bfs()

)while

(tmp=

dinic

(s,inf)

)ans+

=tmp;

if(ans!=tot)

puts

("1");

for(

int x=

1;x<=n;

++x)

putchar

('\n');

}return0;

}

P3254 圓桌問題

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

P3254 圓桌問題

網路流建模,同時求出最大流的乙個可行流 建模如下 求可行流的方法 遍歷左邊的所有節點,在殘留網路上跑滿了流的邊即為一組解 include using namespace std const int n 430,m n 150 270 2,inf 1e8 int n,m,s,t int h n e m...

P3254 圓桌問題

題目鏈結 非常簡單的一道網路流題 我們發現每個單位的人要坐到不同餐桌上,那也就是說每張餐桌上不能有同一單位的人。這樣的話,我們對於每個單位向每張餐桌連一條邊權為1的邊,表示同一餐桌不得有相同單位的人。從源點向每個單位連一條邊權為人數的邊,從餐桌向匯點連一條邊權為餐桌容量的邊,這樣的話跑最大流,跑出來...