P3254 圓桌問題

2022-03-13 04:43:04 字數 1090 閱讀 1669

題目鏈結

非常簡單的一道網路流題

我們發現每個單位的人要坐到不同餐桌上,那也就是說每張餐桌上不能有同一單位的人。這樣的話,我們對於每個單位向每張餐桌連一條邊權為1的邊,表示同一餐桌不得有相同單位的人。從源點向每個單位連一條邊權為人數的邊,從餐桌向匯點連一條邊權為餐桌容量的邊,這樣的話跑最大流,跑出來的結果就是在滿足以上條件的情況下最多能坐多少人,如果結果等於總人數,說明可行,否則不可行。

那麼怎麼輸出方案呢?

我們記錄每個單位向每張餐桌連的邊的序號,如果這條邊流滿了,則說明這個單位有乙個人坐在這張餐桌上。這樣輸出即可

下放**

#include#include#include#include#define ll long long

#define gc getchar

#define maxn 505

#define maxm 100005

using namespace std;

inline ll read()

while(isdigit(p))

return f?-a:a;

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

struct ahahae[maxm<<1];int tot,head[maxn];

inline void add(int u,int v,int w);head[u]=tot++;

}int q[maxn],dep[maxn];

int bfs()

}return 0;

}int dfs(int u,int w)

if(sumreturn sum;

}int main()

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

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

while(bfs())

ans-=dfs(s,2147483647);

if(ans)

puts("1");

for(int i=1;i<=n;++i,puts("")) //這裡就是上面說的輸出方案

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

return 0;

}

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的邊,跑最大流。如果最大流等於單位總人數則有解,輸出滿流邊即為方案。1 include2 using namespace std 3const int n 450,m 150 270 n 2,in...