Cod sursa(job #2694411)

Utilizator bia_bobesBobes Bianca bia_bobes Data 9 ianuarie 2021 10:19:18
Problema Cuplaj maxim in graf bipartit Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.22 kb
#include <iostream>
#include <fstream>
#include <vector>
#define nmax 10005
using namespace std;
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
int m,a,b,cuplat[nmax],m1[nmax],m2[nmax];
vector <int> v[nmax];

void citire()
{
    int k,i,j;
    fin>>a>>b>>m;
    {
        for(k=1;k<=m;k++)
        {
            fin>>i>>j;
            v[i].push_back(j);
        }
    }
}

int cuplaj(int nod)
{
    int j;
    if(cuplat[nod])
        return 0;
    cuplat[nod]=1;
    for(j=0;j<v[nod].size();j++)
        if(!m1[v[nod][j]])
    {
        m1[v[nod][j]]=nod;
        m2[nod]=v[nod][j];
        return 1;
    }
    for(j=0;j<v[nod].size();j++)
        if(cuplaj(m1[v[nod][j]]))
    {
        m1[v[nod][j]]=nod;
        m2[nod]=v[nod][j];
        return 1;
    }
    return 0;
}

int main()
{
    citire();
    int ok=1,i, nr=0;
    while(ok)
    {
        for(i=1;i<=a;i++)
            cuplat[i]=0;
        ok=0;
        for(i=1;i<=a;i++)
            if(!m2[i])
                if(cuplaj(i))
            {
                nr++;
                ok=1;
            }
    }
    fout<<nr<<"\n";
    for(i=1;i<=a;i++)
    if(m2[i])
        fout<<i<<" "<<m2[i]<<"\n";
    return 0;
}