Pagini recente » Cod sursa (job #1055280) | Cod sursa (job #2203430) | Cod sursa (job #2129055) | Cod sursa (job #1584184) | Cod sursa (job #2197907)
#include <bits/stdc++.h>
using namespace std;
vector<int>graf[10005],unused;
int pr[10005];
int pai[10005];
int ap[10005];
int n,m,e,x,y,howmany;
bool try_to_change(int pos)
{
if(ap[pos]==1)
return 0;
ap[pos]=1;
for(int i=0;i<graf[pos].size();i++)
if(pr[graf[pos][i]]==0)
{
pr[graf[pos][i]]=pos;
pai[pos]=graf[pos][i];
return 1;
}
for(int i=0;i<graf[pos].size();i++)
if(try_to_change(pr[graf[pos][i]]))
{
pr[graf[pos][i]]=pos;
pai[pos]=graf[pos][i];
return 1;
}
return 0;
}
int main()
{
freopen("cuplaj.in","r",stdin);
freopen("cuplaj.out","w",stdout);
scanf("%d %d %d\n",&n,&m,&e);
for(int i=1;i<=e;i++)
{
scanf("%d %d\n",&x,&y);
graf[x].push_back(y);
}
for(int i=1;i<=n;i++)
{
for(int j=0;j<graf[i].size();j++)
if(ap[graf[i][j]]==0)
{
pai[i]=graf[i][j];
pr[graf[i][j]]=i;
ap[graf[i][j]]=1;
break;
}
}
bool something_changes=1;
while(something_changes)
{
something_changes=0;
memset(ap,0,sizeof(ap));
for(int i=1;i<=n;i++)
if(pai[i]==0)
something_changes=try_to_change(i);
}
for(int i=1;i<=n;i++)
if(pai[i])
howmany++;
printf("%d\n",howmany);
for(int i=1;i<=n;i++)
if(pai[i])
printf("%d %d\n",i,pai[i]);
return 0;
}