Cod sursa(job #2473726)

Utilizator Catalin2002Catalin Craciun Catalin2002 Data 14 octombrie 2019 09:46:14
Problema Cuplaj maxim in graf bipartit Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.14 kb
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;

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

vector <int> v1[10005],v2[10005];

int pereche[10000];

bool fa_o_pereche(int x)
{
    int i,aux;

    for(i=0;i<v1[x].size();i++)
        if(pereche[ v1[x][i] ] == 0)
        {
            pereche[ v1[x][i] ]= x;

            return true;
        }

    for(i=0;i<v1[x].size();i++)
    {
        if(pereche[ v1[x][i] ] == -1)
            continue;

        aux =pereche[ v1[x][i] ];
        pereche[ v1[x][i] ] =-1;

        if(fa_o_pereche(aux))
            pereche[ v1[x][i] ]= x;
        else
            pereche[ v1[x][i] ]= aux;

    }

    return false;
}


int main()
{
    int n,m,e,x,y,i,ct=0;

    fin>>n>>m>>e;

    for(i=1;i<=e;i++)
    {
        fin>>x>>y;

        v1[x].push_back(y);

    }


    for(i=1;i<=n;i++)
        if(fa_o_pereche(i))
        {
            ct++;
        }

    fout<<ct<<"\n";

    for(i=1;i<=m;i++)
        if(pereche[i]!=0)
        {
            fout<<pereche[i]<<" "<<i<<"\n";

        }




    return 0;
}