P3254 圓桌問題

2022-09-17 08:54:15 字數 2450 閱讀 2508

假設有來自m 個不同單位的代表參加一次國際會議。每個單位的代表數分別為ri(

i=1,

2,……

,m)'>ri(

i=1,

2,……

,m)ri(i=1,2,……,m)

。會議餐廳共有n 張餐桌,每張餐桌可容納ci(

i=1,

2,……

,n)'>ci(

i=1,

2,……

,n)ci(i=1,2,……,n)

個代表就餐。

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

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

輸入格式:第1

行有2個

正整數m

和n,m

表示單位

數,n表

示餐桌數

,1<=

m<=

150,

1<=

n<=

270。

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

行有m個

正整數,

分別表示

每個單位

的代表數

。'>第個正

整數,分

別表示每

個單位的

代表第2

行有m個

正整數,

分別表示

每個單位

的代表數

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

行有n個

正整數,

分別表示

每個餐桌

的容量。

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

輸出格式:如果

問題有解

,第1行

輸出1,

否則輸出

0。接下

來的m行

給出每個

單位代表

的就餐桌

號。如果

有多個滿

足要求的

方案,只

要輸出1

個方案。

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

輸入樣例#1:

4 5

4 5 3 5

3 5 2 6 4

輸出樣例#1:

1 1 2 4 5

1 2 3 4 5

2 4 5

1 2 3 4 5

題解:每個單位的人與每乙個桌子都建立乙個容量為0

'>0

0的邊,每單位與原點建立容量為單位人數的邊,每個桌子都與匯點建立容量為桌子人數的邊,最後檢視邊被減為0

'>0

0的,既代表有人坐。

#include #include #include #include #define inf 0x3f3f3f3f3f3f3f3f

#define ll long long

#define maxn 30000

using namespace std;

int n;//點數、邊數

int x[maxn],y[maxn];

int sp,tp;//原點、匯點

struct node

mp[maxn*10];

int pre[maxn],dis[maxn],cur[maxn];//cur為當前弧優化,dis儲存分層圖中每個點的層數(即到原點的最短距離),pre建鄰接表

int cnt=0;

void init()//不要忘記初始化

void add(int u,int v,int w)//加邊

bool bfs()//建分層圖}}

return dis[tp]!=-1;

}ll dfs(int u,ll cap)//尋找增廣路

}if(!res)

dis[u]=-1;

return res;

}ll dinic()

return ans;

}int main()

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

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

add(0,i,x[i]);

}for (int j = 1; j <=b ; ++j)

n=a+b+1;

sp=0;tp=a+b+1;

int k=dinic();

// printf("%d\n",k);

if(k==sum) printf("1\n");

else

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

printf("\n");

}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的邊,表示同一餐桌不得有相同單位的人。從源點向每個單位連一條邊權為人數的邊,從餐桌向匯點連一條邊權為餐桌容量的邊,這樣的話跑最大流,跑出來...