Pagini recente » Cod sursa (job #1173360) | Cod sursa (job #1487672) | Profil Angel1Ionita | Cod sursa (job #12681) | Cod sursa (job #1073520)
#include<cstdio>
#include<vector>
#include<bitset>
#include<utility>
using namespace std;
typedef pair<int,int> PII;
const int NMAX = 10005;
const int MMAX = 10005;
int N,M,E;
int T[NMAX];
int R[MMAX];
bitset<NMAX> viz;
vector<int> V[NMAX];
vector<PII> sol;
int pairUp(int nod)
{
if(viz[nod]) return 0;
vector<int>::iterator it;
viz[nod]=1;
for(it=V[nod].begin(); it!=V[nod].end(); it++)
if(!R[*it] || pairUp(R[*it]))
{
T[nod]=*it;
R[*it]=nod;
return 1;
}
return 0;
}
int main()
{
int i,a,b;
bool ok;
vector<PII>::iterator it;
freopen("cuplaj.in","r",stdin);
freopen("cuplaj.out","w",stdout);
scanf("%d%d%d",&N,&M,&E);
for(; E; --E)
{
scanf("%d%d",&a,&b);
V[a].push_back(b);
}
for(ok=1; ok; )
{
ok=0;
viz=0;
for(i=1; i<=N; i++)
if(!T[i]) ok=ok|pairUp(i);
}
for(i=1; i<=N; i++)
if(T[i]) sol.push_back(make_pair(i,T[i]));
printf("%d\n",sol.size());
for(it=sol.begin(); it!=sol.end(); it++)
printf("%d %d\n",it->first,it->second);
return 0;
}