網路流24題 圓桌問題

2022-05-31 04:30:11 字數 1761 閱讀 5192

description

假設有來自$n$個不同單位的代表參加一次國際會議。每個單位的代表數分別為$r_i(i\;\in\;[1,n])$。會議餐廳共有$m$張餐桌,每張餐桌可容納$c_i(i\;\in\;[1,m])$個代表就餐。為了使代表們充分交流,希望從同乙個單位來的代表不在同乙個餐桌就餐。求滿足要求的代表就餐方案。

input

第$1$行有$2$個正整數$m,n.m$表示單位數,$n$表示餐桌數。

第$2$行有$m$個正整數,分別表示每個單位的代表數。

檔案第$3$行有$n$個正整數,分別表示每個餐桌的容量。

output

如果問題有解,第$1$行輸出$1$,否則輸出$0$。

接下來的$m$行給出每個單位代表的就餐桌號。如果有多個滿足要求的方案,只要輸出$1$個方案。

sample input

4 5

4 5 3 5

3 5 2 6 4

sample output

1

1 2 4 5

1 2 3 4 5

2 4 5

1 2 3 4 5

hint

$1\;\leq\;m\;\leq\;150,1\;\leq\;n\;\leq\;270$

solution

單位$i$為$x_i$,餐桌$i$為$y_i$,建立二分圖.

從$s$向$x_i$連線一條容量為$r_i$的有向邊,

從$x_i$向$y_j$連線一條容量為$1$的有向邊,

從$y_i$向$t$連線一條容量為$c_i$的有向邊,

如果最大流=人數和,則有解,從集合$x$從發流向集合$y$的滿流邊為當前方案.

#include#include

#include

#include

#include

#include

#include

#include

#include

#include

#define n 275

#define m 155

using

namespace

std;

struct

graphe[(n*m)<<1

];int a[m],b[n],g[n+m],dep[n+m],n,m,s,t,sum,cnt=1

;queue

q;inline

void addedge(int x,int y,int

f) inline

void adde(int x,int y,int

f)inline

bool bfs(int

u) }

return

dep[t];

}inline

int dfs(int u,int

f)

return

ret;

}inline

intdinic()

}inline

void

aireen()

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

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

for(int j=n;j;--j)

adde(i,j+m,1

);

if(dinic()==sum)

}else puts("0"

);

}int

main()

網路流24題 圓桌問題

click me 從原點向每乙個單位連一條流量為單位人數的邊,單位和桌子間連一條流量為1的邊,桌子和匯點之間連一條流量為桌子容量的邊,跑最大流即可。au hany01 date jan 13th,2018 prob luogu3254 email hany01 foxmail.com include...

網路流24題 圓桌問題

二分圖多重匹配問題,可以用最大流解決。建立二分圖,每個單位為x集合中的頂點,每個餐桌為y集合中的頂點,增設附加源s和匯t。1 從s向每個xi頂點連線一條容量為該單位人數的有向邊。2 從每個yi頂點向t連線一條容量為該餐桌容量的有向邊。3 x集合中每個頂點向y集合中每個頂點連線一條容量為1的有向邊。求...

網路流24題 圓桌問題

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