哪位大佬可以帮我看一下这个代码为什么只有7分
查看原帖
哪位大佬可以帮我看一下这个代码为什么只有7分
505959
YangJinxi_7_22楼主2022/2/4 11:49
#define AK return
#define USACO 0;
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
#include <cmath>
#include <vector>
#include <queue>
using namespace std;
const int N = 2e5 + 5;

int m, n;
vector<int> G[N];
int cereal[N];
int ord[N] , tot = 0;
bool pri[N] , vis[N] , used[N];

bool out[N];
int in[N];
vector<int> e[N];

bool find( int x ){
    for(int i = 0 ; i < G[x].size( ) ; i++ ){
        int v = G[x][i];
        if( !used[v] ){
            used[v] = 1;
            if( cereal[v] == 0 ){
                cereal[v] = x;
                return 1;
            }
            if( find( cereal[v] ) ){
                e[x].push_back( cereal[v] );
                in[cereal[v]]++;
                cereal[v] = x;
                return 1;
            }
        }
    }
    return 0;
}

vector<int> ans;

void toposort( ){
    queue<int> q;
    for( int i = 1 ; i <= m ; i++ ){
        if( !in[i] && vis[i] ) q.push( i );
    }
    while( !q.empty( ) ){
        int u = q.front( );
        q.pop( );
        ans.push_back( u );
        for( int i = 0 ; i < e[u].size( ) ; i++ ){
            int v = e[u][i];
            in[v]--;
            if( !in[v] ) q.push( v );
        }
    }
}

int main(){
    cin >> m >> n;
    for( int i = 1 , u , v ; i <= m ; i++ ){
        cin >> u >> v;
        G[i].push_back( u ); G[i].push_back( v );
    }
    int sum = 0;
    for(int i = 1 ; i <= m ; i++ ){
        memset(used, 0, sizeof(used));
        if( find( i ) ){
            vis[i] = 1;
            sum++;
        }
    }
    cout << m-sum <<endl;
    toposort( );
    for( int i = 1 ; i <= m ; i++ ){
        if( !vis[i] ) ans.push_back( i );
    }
    for( int i = 0 ; i < ans.size( ) - 1 ; i++ ){
        cout << ans[i] <<endl;
    }
    cout << ans[ans.size( )-1];
    AK USACO
}

2022/2/4 11:49
加载中...