Cod sursa(job #2818189)

Utilizator OrzataAndreiOrzata Andrei OrzataAndrei Data 15 decembrie 2021 16:07:06
Problema Cuplaj maxim in graf bipartit Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.13 kb
#include <iostream>
#include <fstream>
#include <cstring>
#include <vector>

using namespace std;

ifstream in ("cuplaj.in");
ofstream out ("cuplaj.out");

const int MAXN = 10001;

vector <int> G[MAXN];
int to[MAXN], from[MAXN], visited[MAXN];
int N, M, nr, edges;

int kuhn(int e)
{

    if (visited[e])
        return 0;
    visited[e] = 1;

    for(auto i : G[e])
        if (!from[i] || kuhn(from[i]))
        {

            from[i] = e;
            to[e] = i;

            return 1;
        }
    return 0;
}

int main()
{

    in>>N>>M>>edges;
    for( int i =1 ; i<=edges; i++ )
    {
        int x, y;
        in>>x>>y;
        G[x].push_back(y);

    }
    int ok = 1;
    while (ok)
    {
        ok = 0;
        memset(visited, 0, sizeof(visited));
        for(int i = 1;  i<=N; i++)
        if (!to[i] && kuhn(i))
        {
            ok = 1;
        }

    }
    for(int i = 1;  i<=N; i++)
        if(to[i] != 0)
            nr++;
    out<< nr <<'\n';

    for(int i = 1;  i<=N; i++)
        if (to[i] != 0)
            out<<i<<" "<<to[i]<<"\n";



    return 0;

}