Cod sursa(job #3200978)

Utilizator marian.isPenisoara Marian marian.is Data 6 februarie 2024 12:49:29
Problema Cuplaj maxim in graf bipartit Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.17 kb
#include <bits/stdc++.h>
#define NMAX 10010
using namespace std;
ifstream fin ("cuplaj.in");
ofstream fout ("cuplaj.out");

int viz[NMAX];
int dr[NMAX],st[NMAX];
int graf[NMAX][NMAX];
int n1,n2,nr;

int cupleaza(int nod)
{
    if (viz[nod]) return 0;
    viz[nod] = 1;
    for (int i =1; i<=n2; i++)
    {
        if (!graf[nod][i]) continue; ///Daca exista deja muchie intre noduri
        if (!dr[i] || cupleaza(dr[i]))
        {
            st[nod] = i; ///Cuplam
            dr[i] = nod;
            return 1;
        }
    }
    return 0;
}
void cuplare()
{
    for (int i =1; i<=n1; i++)
    {
        if (st[i])
            continue;

        if (cupleaza(i))
        {
            nr++;
        }
        else
        {
            memset(viz,0,sizeof(viz));

            if (cupleaza(i))
                nr++;
        }

    }
}

int main()
{
    int x,y,n3;
    fin>>n1>>n2>>n3;

    for (int i =1; i<=n3; i++)
    {
        fin>>x>>y;
        graf[x][y] = graf[y][x] = 1;
    }

    cuplare();
    fout<<nr<<'\n';
    for (int i =1; i<=n2;i++)
        if (dr[i])
            fout<<i<<" "<<dr[i]<<'\n';
    return 0;
}