Cod sursa(job #1976830)

Utilizator valentin50517Vozian Valentin valentin50517 Data 4 mai 2017 12:47:42
Problema Cuplaj maxim in graf bipartit Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.65 kb
#include<bits/stdc++.h>

#define maxn (1<<16)

using namespace std;

int L[maxn],R[maxn],E,N,M,rs;
bitset<maxn> B;
vector <int> V[maxn];

int dfs(int v){
    if(B[v]) return 0; 
    B[v] = 1;
    
    for(auto vs:V[v]) if(R[vs]==0) return R[vs]=v, L[v] = vs;
    for(auto vs:V[v]) if(dfs(R[vs]))  return R[vs]=v, L[v] = vs;
    
    return 0;
}

int main(){
	ifstream cin("cuplaj.in");
	ofstream cout("cuplaj.out");
	
	cin >> N >> M >> E;
	
	for(int x,y;E--;){
	    cin >> x >> y;
	    V[x].push_back(y);
	}
	
	for(int i = 1;i<=N;i++) if(L[i]==0 && dfs(i)) rs++, B = 0;
	
	cout << rs << '\n';
	for(int i = 1;i<=N;i++) if(L[i]) cout << i << ' ' << L[i] << '\n';
}