Pagini recente » Cod sursa (job #3229416) | Cod sursa (job #2457554) | Cod sursa (job #1645924) | Cod sursa (job #1615678) | Cod sursa (job #1549400)
#include <iostream>
#include <cstdio>
#include <vector>
#define N 10005
using namespace std;
vector <int> a[N];
int na,nb,m;
int v[N],c[N];
void R()
{
freopen("cuplaj.in","r",stdin);
scanf("%d %d %d",&na,&nb,&m);
int i,x,y;
for(i=0; i<m; ++i)
{
scanf("%d %d",&x,&y);
y+=na;
a[x].push_back(y);
a[y].push_back(x);
}
}
void Greedy()
{
int i;
for(i=1; i<=na+nb; i++)
c[i]=-1;
for(i=1; i<=na; ++i)
if(a[i].size()>0)
{
int j;
for( j=0; j<a[i].size() && c[a[i][j]]>-1; ++j) ;
if(j<a[i].size())
{
c[a[i][j]]=i;
c[i]=a[i][j];
}
}
}
int dfs(int i)
{
v[i]=1;
//cout<<"DSADAS";
for(int j=0; j<a[i].size(); ++j)
{
int k=a[i][j];
if(v[k] || c[i]==k) continue ;
if(c[k]==-1)
{
c[k]=i;
v[k]=1;
c[i]=k;
return 1;
}
v[k]=1;
if(dfs(c[k]))
{
c[k]=i;
c[i]=k;
return 1;
}
}
return 0;
}
void Afiseaza()
{
freopen("cuplaj.out","w",stdout);
int i,sol=0;
for(i=1; i<=na; ++i)
if(c[i]>0) sol++;
printf("%d\n",sol);
for(i=1; i<=na; ++i)
if(c[i]>0)
printf("%d %d\n",i,c[i]-na);
printf("\n");
}
int main()
{
int ok=1,i;
R();
Greedy();
// for(i=1; i<=na+nb; i++)
// c[i]=-1;
while(ok)
{
//Afiseaza();
ok=0;
for(i=1; i<=na+nb; i++) v[i]=0;
for(i=1; i<=na; ++i)
if(!v[i] && c[i]==-1)
if(dfs(i)) ok=1;
}
Afiseaza();
return 0;
}