Cod sursa(job #2418022)

Utilizator RaduXD1Nicolae Radu RaduXD1 Data 2 mai 2019 21:34:55
Problema Cuplaj maxim in graf bipartit Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.95 kb
#include<fstream>
#include<queue>
#define DIM 10010
using namespace std;
ifstream fin("date.in");
ofstream fout("date.out");
int st[DIM],dr[DIM],i,a,b,n,m,e,sol,u[DIM];
vector<int> v[DIM];
int solve(int nod)
{
    if(u[nod]==1) return 0;u[nod]=1;
    for(auto ve:v[nod])
        if(st[ve]==0)
        {
            st[ve]=nod;
            dr[nod]=ve;
            sol++;
            return 1;
        }
    for(auto ve:v[nod])
        if(solve(st[ve]))
        {
            st[ve]=nod;
            dr[nod]=ve;
            return 1;
        }
    return 0;
}
int main()
{
    fin>>n>>m>>e;
    for(i=1;i<=e;i++)
    {
        fin>>a>>b;
        v[a].push_back(b);
    }
    int ok=1;
    while(ok==1)
    {
        ok=0;
        for(i=1;i<=n;i++) u[i]=0;
        for(i=1;i<=n;i++) if(dr[i]==0) ok=max(ok,solve(i));
    }
    fout<<sol<<"\n";
    for(i=1;i<=n;i++)
        if(dr[i]!=0) fout<<i<<" "<<dr[i]<<"\n";
    return 0;
}