Cod sursa(job #3032921)

Utilizator Danut200333Dumitru Daniel Danut200333 Data 23 martie 2023 08:45:24
Problema Cuplaj maxim in graf bipartit Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.88 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
vector <int> v[10001];
int n,m,e,st[10001],dr[10001],x,y,k=1,l;
bool viz[10001];
bool cuplu(int nod)
{
    if(viz[nod]==1)return 0;
    viz[nod]=1;
    for(int i=0;i<v[nod].size();i++)
    {
        int vecin=v[nod][i];
        if(!st[vecin]||cuplu(st[vecin]))
        {
            dr[nod]=vecin;
            st[vecin]=nod;
            return 1;
        }
    }
    return 0;
}
int main()
{
    fin>>n>>m>>e;
    for(int i=1;i<=e;i++)
    {
        fin>>x>>y;
        v[x].push_back(y);
    }
    while(k)
    {
        memset(viz,0,sizeof(viz));
        k=0;
        for(int i=1;i<=n;i++)if(dr[i]==0&&cuplu(i))k=1;
    }
    for(int i=1;i<=n;i++)if(dr[i])l++;
    fout<<l<<'\n';
    for(int i=1;i<=n;i++)if(dr[i])fout<<i<<" "<<dr[i]<<'\n';
    return 0;
}