Cod sursa(job #3268957)

Utilizator tudoor_balasescuBalasescu Tudor tudoor_balasescu Data 18 ianuarie 2025 09:55:01
Problema Cuplaj maxim in graf bipartit Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.13 kb
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
vector <int> d[10005],dr[10005];
vector <pair<int,int>> ans;
int n,m,e,x,y,mt[10005],l[10005];
bool ok=1,viz[10005];
bool khun(int k)
{
    if(viz[k])
        return 0;
    viz[k]=1;
    for(auto it : d[k])
        if(mt[it]==-1 || khun(mt[it]))
        {
            l[k]=it;
            mt[it]=k;
            return 1;
        }
    return 0;
}

int main()
{
    fin>>n>>m>>e;
    for(int i=1; i<=e; i++)
    {
        fin>>x>>y;
        d[x].push_back(y);
    }
    for(int i=1; i<=n; i++)
        l[i]=-1;
    for(int i=1; i<=m; i++)
        mt[i]=-1;
    while(ok)
    {
        ok=0;
        for(int i=1; i<=n; i++)
            viz[i]=0;
        for(int i=1; i<=n; i++)
            if(l[i]==-1)
                ok|=khun(i);
    }
    for(int i=1; i<=m; i++)
        if(mt[i]>0)
            ans.push_back({mt[i],i});
    sort(ans.begin(),ans.end());
    fout<<ans.size()<<'\n';
    for(auto it : ans)
        fout<<it.first<<' '<<it.second<<'\n';
    return 0;
}