Cod sursa(job #1734010)

Utilizator ade_tomiEnache Adelina ade_tomi Data 26 iulie 2016 12:26:01
Problema Cuplaj maxim in graf bipartit Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.24 kb
#include<iostream>
#include<fstream>
#include<vector>
#include<cstring>
#define NMAX 10003
using namespace std;
int st[NMAX],dr[NMAX],ok,sol,viz[NMAX];
vector<int> v[NMAX];
int dfs(int node)
{
    if(viz[node]==1)
        return 0;
    viz[node]=1;

    for(int i=0;i<v[node].size();i++)
    {

        if(dr[v[node][i]]==0)
        {

            dr[v[node][i]]=node;
            st[node]=v[node][i];
            return 1;
        }
    }

    for(int i=0;i<v[node].size();i++)
    {

        if(dfs(dr[v[node][i]])==1)
        {

            dr[v[node][i]]=node;
            st[node]=v[node][i];
            return 1;
        }
    }
    return 0;

}
int n,m,x,y,e;
int main()
{
    int i;
    ifstream cin("cuplaj.in");
    ofstream cout("cuplaj.out");
    cin>>n>>m>>e;
    for(i=1;i<=e;i++)
    {

        cin>>x>>y;
        v[x].push_back(y);
    }
    ok=1;
    while(ok==1)
    {

        ok=0;
        memset(viz,0,sizeof(viz));
        for(i=1;i<=n;i++)
            if(st[i]==0&&dfs(i))
            {
                sol++;
                ok=1;
            }
    }
    cout<<sol<<"\n";
    for(i=1;i<=n;i++)
        if(st[i]!=0)
            cout<<i<<" "<<st[i]<<"\n";
    return 0;

}