跳到主要内容

二分图

参考资料

匈牙利算法

147 Bcpp
bool match(int u)
{
for(auto v:G[u])
{
if(vis[v])continue;
vis[v]=1;
if(!a[v]||match(a[v]))
{
a[v]=u;
return 1;
}
}
return 0;
}

例题

给定一个二分图,其左部点的个数为 nn,右部点的个数为 mm,边数为 ee,求其最大匹配的边数。

左部点从 11nn 编号,右部点从 11mm 编号。

给定一个 NNMM 列的棋盘,已知某些格子禁止放置。

问棋盘上最多能放多少个不能相互攻击的車。

車放在格子里,攻击范围与中国象棋的「車」一致。