Cod sursa(job #2850872)

Utilizator marcumihaiMarcu Mihai marcumihai Data 17 februarie 2022 17:11:21
Problema Cuplaj maxim in graf bipartit Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.18 kb
#include <bits/stdc++.h>

using namespace std;

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

int n, m, e;
vector <int> v[10005];
int viz[10005];
int st[10005];
int dr[10005];

int pairup(int nod)
{
    if(viz[nod]==1)
        return 0;
    viz[nod]=1;
    for(auto x:v[nod])
    {
        if(dr[x]==0)
        {
            st[nod]=x;
            dr[x]=nod;
            return 1;
        }
    }
    for(auto x:v[nod])
    {
        if(pairup(dr[x]))
        {
            st[nod]=x;
            dr[x]=nod;
            return 1;
        }
    }
    return 0;

}



int main()
{
    f>>n>>m>>e;
    for(int i=1; i<=e; ++i)
    {
        int x, y;
        f>>x>>y;
        v[x].push_back(y);
    }
    int ok=0;
    while(ok==0)
    {
        ok=1;
        for(int i=1;i<=n;++i)
            viz[i]=0;

        for(int i=1; i<=n; ++i)
        {
            if(st[i]==0 && pairup(i))
                ok=0;
        }
    }
    int cont=0;
    for(int i=1;i<=n;++i)
        if(st[i]!=0)
            ++cont;
    g<<cont;
    g<<"\n";
    for(int i=1;i<=n;++i)
        if(st[i]!=0)
        g<<i<<" "<<st[i]<<"\n";



    return 0;
}