Cod sursa(job #674554)

Utilizator mihai995mihai995 mihai995 Data 6 februarie 2012 15:15:41
Problema Cuplaj maxim in graf bipartit Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include <fstream>
#include <vector>
#include <cstring>
using namespace std;

const int N=10005;
int S[N],D[N],nr;
bool use[N];
vector<int> a[N];

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

bool pairup(int x)
{
    if (use[x])
        return false;
    use[x]=true;
    for (vector<int>::iterator i=a[x].begin();i!=a[x].end();i++)
        if (!D[*i] || pairup(D[*i]))
        {
            S[x]=*i;
            D[*i]=x;
            return true;
        }
    return false;
}

int main()
{
    int m,x,y;
    in>>S[0]>>D[0]>>m;
    while (m--)
    {
        in>>x>>y;
        a[x].push_back(y);
    }
    for (int i=1;i<=S[0];i++)
        if (!S[i])
        {
            memset(use,false,S[0]);
            nr+=pairup(i);
        }
    out<<nr<<"\n";
    for (int i=1;i<=S[0];i++)
        if (S[i])
            out<<i<<" "<<S[i]<<"\n";
    return 0;
}