圓桌問題 網路流24題 5 24

2021-09-26 19:11:50 字數 1422 閱讀 2391

圓桌問題

題面:假設有來自m 個不同單位的代表參加一次國際會議。每個單位的代表數分別為ri (i =1,2,……,m)。

會議餐廳共有n 張餐桌,每張餐桌可容納ci (i =1,2,……,n)個代表就餐。

為了使代表們充分交流,希望從同乙個單位來的代表不在同乙個餐桌就餐。試設計乙個演算法,給出滿足要求的代表就餐方案。

對於給定的代表數和餐桌數以及餐桌容量,程式設計計算滿足要求的代表就餐方案。

輸入格式

第1 行有2 個正整數m 和n,m 表示單位數,n 表示餐桌數,1<=m<=150, 1<=n<=270。

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

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

輸出格式

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

思路:裸的dinic最大流模板

#include

#define inf 0x3f3f3f3f

using

namespace std;

const

int n =

10005

;int n, m, ss, tt;

int dis[n]

;int cur[n]

;queue<

int> q;

struct edge e[n *10]

;int head[n]

, cnt =-1

;void

add(

int from,

int to,

int value)

bool

bfs(

int s,

int t)}}

return dis[t]!=-

1;}int

dfs(

int x,

int t,

int maxflow)

return ans;

}int

dinic

(int s,

int t)

return ans;

}int

main()

for(

int i=

1;i<=m;i++

)for

(int i=

1;i<=n;i++)}

if(ans!=

dinic

(ss, tt)

)puts

("1");

for(

int i=

1;i<=n;i++

)printf

("\n");

}return0;

}

網路流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 個代表就餐。為了使代表們充分交流,希望從同乙個單位來的代表不在同乙個餐桌就餐。試設計乙個演算法,給出滿足要求的代表就餐方案。對於給定的代表數和餐桌數...