Pagini recente » Cod sursa (job #1777609) | Cod sursa (job #2255649) | Cod sursa (job #3225238) | Cod sursa (job #2930166) | Cod sursa (job #1246164)
# include <cstdio>
# include <vector>
# include <cstring>
# define N 10000
# define pb push_back
using namespace std;
vector <int> G[N];
vector <int> :: iterator it;
int N1,N2,nr,NR;
int U[N],st[N],dr[N];
int cupleaza(int nod)
{
int i,I;
if(U[nod]) return 0;
U[nod]=1;
for(i=0; i<G[nod].size(); ++i)
{
I=G[nod][i];
if(!dr[I] || cupleaza(dr[I]))
{
st[nod]=I;
dr[I]=nod;
return 1;
}
}
return 0;
}
void load()
{
freopen("cuplaj.in", "r", stdin);
int x,y;
scanf("%d %d %d\n", &N1, &N2, &nr);
while(nr--)
{
scanf("%d %d\n", &x, &y);
G[x].pb(y);
}
fclose(stdin);
return;
}
void cuplaj()
{
int i;
for(i=1; i<=N1; ++i)
{
if(st[i]) continue;
if(cupleaza(i)) NR++;
else
{
memset(U, 0, sizeof(U));
if(cupleaza(i)) NR++;
}
}
return;
}
void write()
{
freopen("cuplaj.out", "w", stdout);
int i;
printf("%d\n", NR);
for(i=1; i<=N1; ++i)
if(st[i]) printf("%d %d\n", i, st[i]);
fclose(stdout);
return;
}
int main()
{
load();
cuplaj();
write();
return 0;
}