Cod sursa(job #534368)

Utilizator PlayLikeNeverB4George Marcus PlayLikeNeverB4 Data 15 februarie 2011 16:58:11
Problema Cuplaj maxim in graf bipartit Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include <fstream>
using namespace std;
ifstream fin("java.in");
ofstream fout("java.out");

#include <vector>
#define maxn 10005

int i,N,M,E,T,Cmax;
vector <short> A[maxn];
int S[maxn],D[maxn],v[maxn];

int pairup(int x)
{
	vector <short> :: iterator it;
	if(v[x]) return 0;
	v[x]=1;
	for(it=A[x].begin();it!=A[x].end();it++)
		if( S[*it]==0 || pairup(S[*it]) )
		{
			D[x]=*it; S[*it]=x; return 1;
		}
	return 0;
}

int main()
{
	int ok; short x,y;
	for(fin >> T;T;T--)
	{
		fin >> M >> N >> E;
		for(;E;E--)
		{
			fin >> x >> y;
			A[x].push_back(y);
		}
		ok=1; Cmax=0;
		for(i=1;i<=M;i++) D[i]=S[i]=0;
		while(ok)
		{
			ok=0;
			for(i=1;i<=M;i++) v[i]=0;
			for(i=1;i<=M;i++)
				if(D[i]==0)
					if( pairup(i) )
					{
						Cmax++;
						ok=1;
					}
		}
		fout << Cmax << '\n';
		for(i=1;i<=M;i++)
			for(;!A[i].empty();A[i].pop_back());
	}
}