1194

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <map>
#include <vector>

using namespace std;

//int gr[105][105];
vector<int> gr[105];
int n,m,k;
int rside[105],lside[105];
bool visit[105];

bool dfs(int pos)
{
	for(int i=0;i<gr[pos].size();i++)
	{
		if(visit[gr[pos][i]])
		continue;

		visit[gr[pos][i]] = 1;

		if(lside[gr[pos][i]]==-1 || dfs(lside[gr[pos][i]]))
		{
			rside[pos] = gr[pos][i];
			lside[gr[pos][i]]= pos;
			return 1;
		}
	}
	return 0;
}

int main()
{
	int job,a,b;

	while(cin>>n)//row =machine A mode and colmn = machine B mode
	{
		if(n==0)
		break;
		cin>>m>>k;

		for(int i=0;i<105;i++)
		{
			gr[i].clear();
			rside[i]=-1;
			lside[i]=-1;
		}

		for(int i=0;i<k;i++)
		{
			cin>>job>>a>>b;
			if(!a || !b)
				continue;
			gr[a].push_back(b);
		}

		int res = 0;
		for(int i=0;i<n;i++)
		{
			memset(visit,0,sizeof(visit));
			if(dfs(i))
			res+=1;
		}
		cout<<res<<"\n";
	}

	return 0;
}

 

Leave a Reply

Your email address will not be published. Required fields are marked *