Pagini recente » Cod sursa (job #2164498) | Cod sursa (job #2476366) | Cod sursa (job #2452746) | Cod sursa (job #2448890) | Cod sursa (job #921391)
Cod sursa(job #921391)
#include<stdio.h>
#include<vector>
#define pb push_back
#define maxn 10005
using namespace std;
int n,m,p,ok,nr,sol;
int lt[maxn],rt[maxn],v[maxn];
vector <int> l[maxn];
void cit()
{
int i;
int x,y;
scanf("%d%d%d",&n,&m,&p);
for(i=1;i<=p;i++)
{
scanf("%d%d",&x,&y);
l[x].pb(y);
}
}
int new_pair(int k)
{
if(v[k]==nr) return 0;
v[k]=nr;
for(unsigned int i=0;i<l[k].size();i++)
if(rt[l[k][i]]==0)
{
lt[k]=l[k][i];
rt[l[k][i]]=k;
return 1;
}
for(unsigned int i=0;i<l[k].size();i++)
if(new_pair(rt[l[k][i]]))
{
lt[k]=l[k][i];
rt[l[k][i]]=k;
return 1;
}
return 0;
}
void solve()
{
int i;
ok=1;
while(ok)
{
ok=0; nr++;
for(i=1;i<=n;i++)
if(lt[i]==0)
if(new_pair(i))
ok=1,sol++;
}
}
void afis()
{
int i;
printf("%d\n",sol);
for(i=1;i<=n;i++)
if(lt[i])
printf("%d %d\n",i,lt[i]);
}
int main()
{
freopen("cuplaj.in","r",stdin);
freopen("cuplaj.out","w",stdout);
cit();
solve();
afis();
fclose(stdin);
fclose(stdout);
return 0;
}