求奆佬看看!
  • 板块学术版
  • 楼主lzx111218
  • 当前回复0
  • 已保存回复0
  • 发布时间2025/1/3 21:19
  • 上次更新2025/1/4 11:12:17
查看原帖
求奆佬看看!
1405906
lzx111218楼主2025/1/3 21:19

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怎么改,谢谢!

2025/1/3 21:19
加载中...