题目如下:
思路 or 题解
我们通过建两个图 进行二分图匹配
第一个图记录每个英雄打怪兽的情况,第二个图记录每个英雄可以额外打的怪兽情况。
因为
k
k
k 是有限的,所有最后答案要记得取
m
i
n
min
min
AC 代码如下:
const int N = 1009;
int n, m, k;
bool st[N];
int match[N];
vector<int> g[N];
bool find(int x)
{
for (auto it : g[x])
{
if (!st[it])
{
st[it] = 1;
if (match[it] == 0 || find(match[it]))
{
match[it] = x;
return true;
}
}
}
return false;
}
void solve()
{
cin >> n >> m >> k;
for (int i = 1; i <= n; i++)
{
int tt; cin >> tt;
for (int j = 1; j <= tt; j++)
{
int x; cin >> x;
g[i].push_back(x);
g[i + n].push_back(x);
}
}
int sum = 0, sum2 = 0;
for (int i = 1; i <= n * 2; i++)
{
memset(st, 0, sizeof st);
if (find(i))
{
if (i <= n)
sum++;
else
sum2++;
}
}
cout << sum + min(sum2, k) << '\n';
}
int main()
{
buff;
solve();
}