Cod sursa(job #2972654)

Utilizator LXGALXGA a LXGA Data 29 ianuarie 2023 22:16:58
Problema Cuplaj maxim in graf bipartit Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.3 kb
#include <fstream>
#include <algorithm>
#include <vector>
#include <queue>
#include <string>
#define ll long long
#define mod 1000000007
using namespace std;
ifstream cin("cuplaj.in");
ofstream cout("cuplaj.out");
int n,m,e,a,b,mt[10001];
bool use[10001],use1[10001];
vector<int> g[10001];
bool trykuhn(int nod)
{
    if(use[nod])
        return 0;
    use[nod]=1;
    for(auto i:g[nod])
    {
        if(mt[i]==0 || trykuhn(mt[i]))
        {
            mt[i]=nod;
            return 1;
        }
    }
    return 0;
}
int main()
{
	ios_base::sync_with_stdio(false);
    cin>>n>>m>>e;
    for(int i=1;i<=e;i++)
    {
        cin>>a>>b;
        g[a].push_back(b);
    }
    for(int i=1;i<=n;i++)
    {
        for(auto j:g[i])
        {
            if(mt[j]==0)
            {
                mt[j]=i;
                use1[i]=1;
                break;
            }
        }
    }
    for(int i=1;i<=n;i++)
    {
        if(use1[i])
            continue;
        for(int j=1;j<=n;j++)
            use[j]=0;
        trykuhn(i);
    }
    vector<pair<int,int>> ans;
    for(int i=1;i<=m;i++)
    {
        if(mt[i])
            ans.push_back({mt[i],i});
    }
    cout<<ans.size()<<'\n';
    for(auto &i:ans)
        cout<<i.first<<' '<<i.second<<'\n';
	return 0;
}