求调(我用一种极其缺德的方法过掉了此题
查看原帖
求调(我用一种极其缺德的方法过掉了此题
1079004
MelancholyZ楼主2025/8/1 01:21

88分代码 WA on #12

#include<bits/stdc++.h>
#define int long long

using namespace std;

const int Maxn = 305;

vector<int> g[Maxn], path[Maxn];
int match[Maxn], n, m, ans, to[Maxn], cnt = 1;
bool st[Maxn], vis[Maxn];

bool find(int u){
    for(auto v : g[u]){
        if(st[v]) continue;
        st[v] = 1;
        if(!match[v] || find(match[v])){
            match[v] = u;
            to[u] = v;
            return true;
        }
    }

    return false;
}

void print(int u){
    path[cnt].push_back(u);
    vis[u] = 1;
    if(!to[u]){cnt ++; return;}
    print(to[u] - n);
}

signed main(){
    cin >> n >> m;
    for(int i = 1, u ,v; i <= m; i ++){
        cin >> u >> v;
        g[u].push_back(v + n);
    }

    for(int i = 1; i <= n; i ++){
        memset(st, 0, sizeof(st));
        if(find(i)) ans ++;
    }

    //memset(to + 1, to + n + 1);
    for(int i = 1; i <= n; i ++) if(!vis[i]) print(i);

    for(int i = 1; i < cnt; i ++){
        for(auto j : path[i]) cout << j << ' ';
        cout << '\n';
    }
    cout << n - ans;
    return 0;
}

最后一个点的数据需要排序能过

#include<bits/stdc++.h>

using namespace std;

const int Maxn = 305;

vector<int> g[Maxn], path[Maxn];
int match[Maxn], n, m, ans, to[Maxn], cnt = 1;
bool st[Maxn], vis[Maxn];

bool find(int u){
    for(auto v : g[u]){
        if(st[v]) continue;
        st[v] = 1;
        if(!match[v] || find(match[v])){
            match[v] = u;
            to[u] = v;
            return true;
        }
    }

    return false;
}

void print(int u){
    path[cnt].push_back(u);
    vis[u] = 1;
    if(!to[u]){cnt ++; return;}
    print(to[u] - n);
}

int main(){
    cin >> n >> m;
    for(int i = 1, u ,v; i <= m; i ++){
        cin >> u >> v;
        g[u].push_back(v + n);
    }

    for(int i = 1; i <= n; i ++){
        memset(st, 0, sizeof(st));
        if(find(i)) ans ++;
    }

    sort(to + 1, to + n + 1);
    for(int i = n; i >= 1; i --) if(!vis[i]) print(i);

    for(int i = 1; i < cnt; i ++){
        for(auto j : path[i]) cout << j << ' ';
        cout << '\n';
    }
    cout << n - ans;
    return 0;
}

但是其他点会MLE

求助怎么解决这两个代码中的问题。

(最后根据数据将两个代码缝合AC此题的代码就不放了

2025/8/1 01:21
加载中...