匈牙利(Hungary)算法
int xyl()
{
int ans = 0;
for (int i = 1; i <= n; i++)
{
memset(vis, 0, sizeof(vis));
if (dfs(i)) ans++;
}
}
bool dfs(int now)
{
for (int i = head[now]; i; i = edge[i].nxt)
{
int to = edge[i].to;
if (!vis[to])
{
if (!match[to] || dfs(match(to)))
{
match[to] = now;
return true;
}
}
}
return false;
}
求最大匹配
bool Hungary(int x)
{
for (int i=h[x];i;i=nxt[i])
{
int y=to[i];
if (!vis[y])
{
vis[y]=true;
if (!match[y] || Hungary(match[y]))
{
match[y]=x;
return true;
}
}
}
return false;
}
$\mathscr{msjing}$

浙公网安备 33010602011771号