题解 P7368
Silence_water · · 题解
题目传送门
二分图最小覆盖的模型特点是:每条边有
2 个端点,二者至少选择一个。我们不妨称之为 "2 要素"。——李煜东《算法竞赛进阶指南》
我们来寻找一下本题的 "
每个小行星可以通过本行的武器或每列的武器被消除,二者至少选择一个。
我们将每个小行星的
换句话说,问题就是要求出一个最小的点集
故求消除所有小行星的最小代价就相当于求这张二分图的最小点覆盖数。
根据 König 定理,二分图最小点覆盖包含的点数等于二分图最大匹配包含的边数。
直接用匈牙利算法跑即可。
bool dfs(int u)
{
for(int i=1;i<=n;i++)
{
if(!e[u][i]||vis[i])continue;
vis[i]=true;
if(!match[i]||dfs(match[i]))
{
match[i]=u;
return true;
}
}
return false;
}
int solve()
{
memset(match,0,sizeof(match));
int cnt=0;
for(int i=1;i<=n;i++)
{
memset(vis,false,sizeof(vis));
if(dfs(i))cnt++;
}
return cnt;
}
upd 2023/1/3:根据评论区反馈修正了错误。