Cod sursa(job #2279979)

Utilizator BogdanGhGhinea Bogdan BogdanGh Data 10 noiembrie 2018 10:46:48
Problema Cuplaj maxim in graf bipartit Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.93 kb
#include <bits/stdc++.h>

using namespace std;
vector <int> v[10001];
bool done=1,marked[10001];
int n,m,e,i,L[10001],R[10001],x,y,nr;
bool cupleaza(int node)
{
    marked[node]=1;
    for(auto it:v[node])
    if(!R[it])
    {
        L[node]=it;
        R[it]=node;
        return 1;
    }
    for(auto it:v[node])
    if(!marked[R[it]]&&cupleaza(R[it]))
    {
        L[node]=it;
        R[it]=node;
        return 1;
    }
    return 0;
}
ifstream f("cuplaj.in");
ofstream g("cuplaj.out");
int main()
{
    f>>n>>m>>e;
    for(i=1;i<=e;i++)
    {
        f>>x>>y;

        v[x].push_back(y);
    }
   while(done)
   {
       done=0;
       for(i=1;i<=n;i++)
           marked[i]=0;
       for(i=1;i<=n;i++)
        if(!marked[i]&&!L[i])
        done|=cupleaza(i);
   }
   for(i=1;i<=n;i++)
    if(L[i])nr++;
   g<<nr<<"\n";
    for(i=1;i<=n;i++)
    if(L[i])g<<i<<" "<<L[i]<<"\n";
    return 0;
}