建立二分圖,每個單位為x集合中的頂點,每個餐桌為y集合中的頂點,增設附加源s和匯t。
1、從s向每個xi頂點連線一條容量為該單位人數的有向邊。
2、從每個yi頂點向t連線一條容量為該餐桌容量的有向邊。
3、x集合中每個頂點向y集合中每個頂點連線一條容量為1的有向邊。
求網路最大流,如果最大流量等於所有單位人數之和,則存在解,否則無解。對於每個單位,從x集合對應點出發的所有滿流邊指向的y集合的頂點就是該單位人員的安排情況(乙個可行解)。
這個題是多解也就是求出來的只是乙個可行解。。。。所以測資料可能有的會錯。。。。簡單題。。。
#include#include#includeusing namespace std;
#define inf 1<<30
#define n 100000
#define cc(m,v) memset(m,v,sizeof(m))
struct nodeedge[n];
int head[1000],p,lev[1000],cur[1000];
int que[n];
void ainit()
bool bfs(int s,int t)
}return 0;
}int dinic(int s,int t)}}
return flow;
}void addedge(int u,int v,int f)
int main()
for(i=m+1;i=1+m;j--)
addedge(i,j,1);
if(sum<=sum1 && dinic(s,t)==sum)
}else
printf("0\n");
}return 0;
}
網路流24題5 圓桌問題
假設有來自 n 個不同單位的代表參加一次國際會議。每個單位的代表數分別為ri 會議餐廳共有 m 張餐桌,每張餐桌可容納ci 個代表就餐。為了使代表們充分交流,希望從同乙個單位來的代表不在同乙個餐桌就餐。試設計乙個演算法,給出滿足要求的代表就餐方案。對於給定的代表數和餐桌數以及餐桌容量,程式設計計算滿...
網路流24題 05 圓桌聚餐(最大流判滿流)
題目大意 有m個不同單位的代表人來參加會議,每個單位的人數是確定的,會議餐廳有n張桌子,每個桌子能容納的人數也是確定的,現在希望來自乙個單位的人不在同乙個桌子上就餐,求出滿足要求的就餐方案,並輸出方案 思路分析 設立乙個源點,連向每乙個單位,流量為每個單位來參加會議的人數 從每個單位向每個桌子連一條...
網路流24題 5 圓桌問題 題解
題目鏈結 洛谷 p3254 有來自 m 個不同單位的代表參加一次國際會議。第 i 個單位派出了 r i 個代表。會議的餐廳共有 n 張餐桌,第 i 張餐桌可容納 c i 個代表就餐。為了使代表們充分交流,希望從同乙個單位來的代表不在同乙個餐桌就餐。請給出乙個滿足要求的代表就餐方案。我們考慮從源點向每...