Cod sursa(job #2685954)

Utilizator Constantin.Dragancea Constantin Constantin. Data 18 decembrie 2020 09:28:15
Problema Cuplaj maxim in graf bipartit Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.95 kb
	
#include <bits/stdc++.h>	
using namespace std;	 
	
#define N 10005	
int n, m, e, r[N], l[N], ans;	
vector <int> v[N];	
bool viz[N]; 
	
bool dfs(int q){	
    if (viz[q]) return 0;	
    viz[q] = 1;	
    for (auto it: v[q]){	
        if (!r[it] || dfs(r[it])){	
            l[q] = it;	
            r[it] = q;	
            return 1;	
        }	
    }	
    return 0;	
} 
	
int main(){	
    ifstream cin ("cuplaj.in");	
    ofstream cout ("cuplaj.out");
    	
    cin >> n >> m >> e;
	
    for (int i=1, x, y; i<=e; i++){	
        cin >> x >> y;	
        v[x].push_back(y);	
    }	
    bool flag = 1;	
    while (flag){
	    flag = 0;	
        for (int i=1; i<=n; i++) viz[i] = 0;	
        for (int i=1; i<=n; i++){	
            if (!l[i] && dfs(i)){	
                flag = 1;	
                ans++;	
            }	
        }	
    }
	
    cout << ans << '\n';
	
    for (int i=1; i<=n; i++)	
        if (l[i]) cout << i << ' ' << l[i] << '\n';
        	
    return 0;	
}