Pagini recente » Cod sursa (job #1747360) | Cod sursa (job #1892448) | Cod sursa (job #1050294) | Cod sursa (job #73983) | Cod sursa (job #1926843)
#include <cstdio>
#include <cstring>
const int Q=10007, W=100007;
int lst[Q],nxt[W],val[W];
int cnt;
void add(int a, int b)
{
val[++cnt]=b;
nxt[cnt]=lst[a];
lst[a]=cnt;
}
int n,z,m;
int st[Q],dr[Q];
bool viz[Q];
bool cuplare(int nod)
{
if(viz[nod]==1)
return 0;
viz[nod]=1;
for(int p=lst[nod]; p; p=nxt[p])
{
if(dr[val[p]]==0)
{
st[nod]=val[p];
dr[val[p]]=nod;
return 1;
}
}
for(int p=lst[nod]; p; p=nxt[p])
{
if(cuplare(dr[val[p]]))
{
st[nod]=val[p];
dr[val[p]]=nod;
return 1;
}
}
return 0;
}
int main()
{
freopen("cuplaj.in","r",stdin);
freopen("cuplaj.out","w",stdout);
scanf("%d%d%d",&n,&z,&m);
int a,b;
for(int i=1; i<=m; i++)
{
scanf("%d%d",&a,&b);
add(a,b);
}
bool t=1;
int rez=0;
while(t)
{
t=0;
memset(viz, 0, sizeof viz);
for(int i=1; i<=n; i++)
{
if(st[i]==0 && cuplare(i))
{
rez++;
t=1;
}
}
}
printf("%d\n",rez);
for(int i=1; i<=n; i++)
{
if(st[i])
{
printf("%d %d\n",i,st[i]);
}
}
return 0;
}