圓桌問題 網路流24題

2022-08-01 17:45:12 字數 1114 閱讀 5393

有n個單位,每個單位有一些人,有m張桌子,每張桌子可以坐一些人,每個單位的人不能坐一張桌子,輸出方案。

1<=n<=150, 1<=m<=270。

一開始把每個人都看成乙個點,然後乙個乙個依次放進去,就是貪心(可這和網路流有什麼關係呢),於是放棄了。去看題解,還真**可以貪心,需要一些排序。

然後網路流解法來了,把單位和桌子看成兩部分,桌子與單位之間連邊流量為1就可以保證條件,源點與單位之間連邊流量為單位人數,匯點與桌子之間連邊流量為桌子容量。

(我真蠢)

然後交了一波平常寫的網路流結果最後乙個點瘋狂t,明明前面還都挺快,然後一看討論很多都是最後乙個點t,然後有的說要當前弧優化啥的。

(不想學)就去看了題解,看到乙個dalao說這題不用拆點,弧優化,二分答案,xjb建圖,是清流(疑問臉)。一看感覺沒啥區別嘛,就只有在dfs裡面一句 if(!rest) break;

結果加上直接原地起飛。

#includeusing

namespace

std;

const

int maxn=506

;const

int maxm=90006

;int

n,m,tot;

int cnt=1

,s,t,head[maxn];

struct

edgee[maxm];

void add(int x,int y,int

val);

head[x]=cnt;

}int

d[maxn];

bool

bfs()

}}

return

false;}

int dfs(int x,int

flow)

} return flow-rest;

}int

dinic()

intmain()

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

int ans=dinic();

if(ans!=tot)

printf(

"1\n");

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

}

view code

網路流24題 圓桌問題

click me 從原點向每乙個單位連一條流量為單位人數的邊,單位和桌子間連一條流量為1的邊,桌子和匯點之間連一條流量為桌子容量的邊,跑最大流即可。au hany01 date jan 13th,2018 prob luogu3254 email hany01 foxmail.com include...

網路流24題 圓桌問題

二分圖多重匹配問題,可以用最大流解決。建立二分圖,每個單位為x集合中的頂點,每個餐桌為y集合中的頂點,增設附加源s和匯t。1 從s向每個xi頂點連線一條容量為該單位人數的有向邊。2 從每個yi頂點向t連線一條容量為該餐桌容量的有向邊。3 x集合中每個頂點向y集合中每個頂點連線一條容量為1的有向邊。求...

網路流24題 圓桌問題

假設有來自m 個不同單位的代表參加一次國際會議。每個單位的代表數分別為ri i 1,2,m 會議餐廳共有n 張餐桌,每張餐桌可容納ci i 1,2,n 個代表就餐。為了使代表們充分交流,希望從同乙個單位來的代表不在同乙個餐桌就餐。試設計乙個演算法,給出滿足要求的代表就餐方案。對於給定的代表數和餐桌數...