https://www.luogu.com.cn/problem/P11501
#include<bits/stdc++.h>
using namespace std;
const int N=1e7+114514;
int n, m[N], a[N];
bool v[N];
vector<int> g[N];
bool dfs(int u) {
for (int i : g[u]) {
if (!v[i]) {
v[i] = true;
if (m[i] == -1 || dfs(m[i])) {
m[i] = u;
m[u] = i;
return true;
}
}
}
return false;
}
void solve() {
scanf("%d", &n);
for (int i = 1; i <= n; ++i) {
scanf("%d", &a[i]);
}
for (int i = 1; i <= n; ++i) {
if (a[i] != -1) {
g[i].push_back(a[i]);
g[a[i]].push_back(i);
}
}
memset(m, -1, sizeof(m));
int res = 0;
for (int i = 1; i <= n; ++i) {
if (m[i] == -1) {
memset(v, 0, sizeof(v));
if (dfs(i)) {
++res;
}
}
}
printf("%d\n", n - res);
}
int main() {
solve();
return 0;
}
TLE怎么改,谢谢!