Cod sursa(job #2881411)

Utilizator Uriesu_IuliusUriesu Iulius Uriesu_Iulius Data 30 martie 2022 14:55:13
Problema Cuplaj maxim in graf bipartit Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.87 kb
#include <bits/stdc++.h>
using namespace std;

#define ll long long
#define ipair pair<int, int>

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

const int mxN=1e4+1;
int n, m, k, mt[mxN];
vector<int> G[mxN];
bool vis[mxN];

bool dfs(int u)
{
    vis[u]=1;
    for(int v : G[u])
        if(!mt[v] || !vis[mt[v]] && dfs(mt[v]))
        {
            mt[v]=u;
            return true;
        }
    return false;
}

int main()
{
    fin >> n >> m >> k;
    for(int i=0; i<k; i++)
    {
        int a, b;
        fin >> a >> b;
        G[a].push_back(b);
    }
    int maxMatch=0;
    for(int i=1; i<=n; i++)
    {
        for(int j=1; j<=n; j++)
            vis[j]=0;
        maxMatch+=dfs(i);
    }
    fout << maxMatch << "\n";
    for(int i=1; i<=m; i++)
        if(mt[i])
            fout << mt[i] << " " << i << "\n";
    return 0;
}