題解:源點向單位建容量為單位人數的邊,桌子向匯點建容量為桌子最多容納多少人的邊,單位向所有桌子連容量為1的邊,跑最大流。
如果最大流等於單位總人數則有解,輸出滿流邊即為方案。
1 #include2using
namespace
std;
3const
int n=450,m=(150*270+n)*2,inf=1e9;
4int
h[n],e[m],ne[m],f[m],idx;
5int
cur[n],d[n];
6int
n,m,s,t;
7void add(int a,int b,intc)8
12bool
bfs()
1333}34
}35return
false;36
}37int find(int u,int
limit)
3851}52
return
flow;53}
54int
dinic()
5560
intmain()
6173
for(int i=1;i<=n;i++)
7479
for(int i=1;i<=m;i++)
80for(int j=1;j<=n;j++)
81 add(i,m+j,1
);82
if(tot!=dinic())puts("0"
);83
else
8494 printf("\n"
);95}96
}97 }
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的邊,表示同一餐桌不得有相同單位的人。從源點向每個單位連一條邊權為人數的邊,從餐桌向匯點連一條邊權為餐桌容量的邊,這樣的話跑最大流,跑出來...