Cod sursa(job #3330008)

Utilizator Radu_BicliBiclineru Radu Radu_Bicli Data 16 decembrie 2025 23:18:20
Problema Felinare Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.9 kb
#include <bits/stdc++.h>

using namespace std;

#define USE_STD_IO 0
//#define if(USE_STD_IO) cout
#if USE_STD_IO
    #define fin cin
    #define fout cout
#else
    ifstream fin("felinare.in");
    ofstream fout("felinare.out");
#endif // USE_STD_IO

int n, m, i, rasp;
vector<int> gr[10002];

bool viz[10002], ok;
int cup[2][10002];
bool fr[10002];

static inline bool Cupleaza(int nod) {
    if(viz[nod]) return false;
    viz[nod] = true;
    for(int vec : gr[nod]) {
        if(cup[1][vec] == 0) {
            fr[nod] = true;
            cup[1][vec] = nod;
            cup[0][nod] = vec;
            return true;
        }
    }
    for(int vec : gr[nod]) {
        if(Cupleaza(cup[1][vec])) {
            fr[nod] = true;
            cup[1][vec] = nod;
            cup[0][nod] = vec;
            return true;
        }
    }

    return false;
}

static inline void CuplajCall() {
    bool ok;
    do {
        ok = false;
        memset(viz, false, sizeof(viz));
        for(i = 1; i <= n; i++) {
            if(cup[0][i] == 0) ok |= Cupleaza(i);
        }
    }
    while(ok);
}

static inline void DFS(int nod) {
    for(int vec : gr[nod]) {
        if(!viz[vec]) {
            fr[cup[1][vec]] = false;

            viz[vec] = true;
            DFS(cup[1][vec]);
        }
    }
}

int main() {
    fin.tie(nullptr);
    fout.tie(nullptr);

    fin >> n >> m;
    for(i = 1; i <= m; i++) {
        int x, y;
        fin >> x >> y;
        gr[x].push_back(y);
    }

    CuplajCall();

    rasp = 2 * n;
    for(i = 1; i <= n; i++) rasp -= (cup[0][i] != 0);
    fout << rasp << "\n";


    memset(viz, false, sizeof(viz));
    for(i = 1; i <= n; i++) {
        if(!fr[i]) DFS(i);
    }

    for(i = 1; i <= n; i++) {
        rasp = 3;
        if(fr[i]) rasp--;
        if(viz[i]) rasp -= 2;
        fout << rasp << "\n";
    }

    return 0;
}