Cod sursa(job #2689671)

Utilizator Constantin.Dragancea Constantin Constantin. Data 21 decembrie 2020 20:03:40
Problema Cuplaj maxim in graf bipartit Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.78 kb
#include <bits/stdc++.h>
using namespace std;

const int N = 10010;
int n, m, e, l[N], r[N], ans;
vector <int> graph[N];
bool vis[N];

bool dfs(int node){
	if (vis[node])
		return 0;
	vis[node] = 1;

	for (int nei: graph[node]){
		if (!r[nei] || dfs(r[nei])){
			l[node] = nei;
			r[nei] = node;
			return 1;
		}
	}
	return 0;
}

int main(){
	ifstream cin("cuplaj.in");
	ofstream cout("cuplaj.out");

	cin >> n >> m >> e;

	while (e--){
		int a, b;
		cin >> a >> b;
		graph[a].push_back(b);
	}

	bool flag = 1;
	while (flag){
		flag = 0;
		for (int i = 1; i <= n; ++i)
			vis[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;
}