Cod sursa(job #2341674)

Utilizator SchnitzelMannPavaloiu Gabriel SchnitzelMann Data 12 februarie 2019 09:14:01
Problema Cuplaj maxim in graf bipartit Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1 kb
#include<bits/stdc++.h>
using namespace std;
ifstream in("cuplaj.in");
ofstream out("cuplaj.out");
vector<int> v[10002];
int viz[10002],l[10002],r[10002];
bool f(int nr)
{
    if(viz[nr]) return 0;
    viz[nr]=1;
    for(auto it:v[nr])
        if(!r[it])
        {
            r[it]=nr;
            l[nr]=it;
            return 1;
        }
    for(auto it:v[nr])
        if(f(r[it]))
        {
            r[it]=nr;
            l[nr]=it;
            return 1;
        }
    return 0;
}
int main()
{
    int n,m,s,i,nr1,nr2,ok=1;
    in>>n>>m>>s;
    while(s--)
    {
        in>>nr1>>nr2;
        v[nr1].push_back(nr2);
    }
    s=0;
    while(ok)
    {
        ok=0;
        memset(viz,0,sizeof(viz));
        for(i=1;i<=n;i++)
            if(!l[i])
            {
                m=f(i);
                ok|=m;
                s+=m;
            }
    }
    out<<s<<"\n";
    for(i=1;i<=n;i++)
        if(l[i])
            out<<i<<" "<<l[i]<<"\n";
    return 0;
}