Pagini recente » Cod sursa (job #2284506) | Cod sursa (job #2634756) | Cod sursa (job #555788) | Cod sursa (job #1389917) | Cod sursa (job #2740385)
#include <bits/stdc++.h>
#define nmax 100001
using namespace std;
vector<int> adj[nmax];
int l[nmax],r[nmax];
int ans;
bool visited[nmax];
bool cupl(int nod)
{
if(visited[nod]) return 0;
for(int i=0;i<adj[nod].size();i++)
{
if(r[adj[nod][i]]==0)
{
l[nod]=adj[nod][i];
r[adj[nod][i]]=nod;
return 1;
}
}
visited[nod]=1;
for(int i=0;i<adj[nod].size();i++)
{
if(cupl(r[adj[nod][i]])==1)
{
l[nod]=adj[nod][i];
r[adj[nod][i]]=nod;
return 1;
}
}
return 0;
}
int main()
{
freopen("cuplaj.in","r",stdin);
freopen("cuplaj.out","w",stdout);
int nl,nr,m;
scanf("%i %i %i",&nl,&nr,&m);
for(int i=0;i<m;i++)
{
int a,b;
scanf("%i %i",&a,&b);
adj[a].push_back(b);
}
bool ok=1;
while(ok)
{
ok=0;
for(int i=1;i<=nl;i++)
{
if(cupl(i))
{
ans++;
ok=1;
}
}
for(int i=1;i<=nl;i++) visited[i]=0;
}
printf("%i\n",ans);
for(int i=1;i<=nl;i++)
{
if(l[i]) printf("%i %i\n",i,l[i]);
}
return 0;
}