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