P3254 圓桌問題

2021-10-10 13:40:55 字數 833 閱讀 4671

網路流建模,同時求出最大流的乙個可行流

建模如下

求可行流的方法:遍歷左邊的所有節點,在殘留網路上跑滿了流的邊即為一組解

#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], f[m], ne[m], idx;

//q是佇列,d是分層路,cur是當前弧優化

int q[n], d[n], cur[n];

void add(int a, int b, int c)

bool bfs()

} }return false;

}int find(int u, int limit)

} return flow;

}int dinic()

return r;

}int main()

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

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

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

int maxflow = dinic();

if (maxflow != sum) puts("0");

else

puts("");

} }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 圓桌問題

題目鏈結 非常簡單的一道網路流題 我們發現每個單位的人要坐到不同餐桌上,那也就是說每張餐桌上不能有同一單位的人。這樣的話,我們對於每個單位向每張餐桌連一條邊權為1的邊,表示同一餐桌不得有相同單位的人。從源點向每個單位連一條邊權為人數的邊,從餐桌向匯點連一條邊權為餐桌容量的邊,這樣的話跑最大流,跑出來...

P3254 圓桌問題

題解 源點向單位建容量為單位人數的邊,桌子向匯點建容量為桌子最多容納多少人的邊,單位向所有桌子連容量為1的邊,跑最大流。如果最大流等於單位總人數則有解,輸出滿流邊即為方案。1 include2 using namespace std 3const int n 450,m 150 270 n 2,in...