Pagini recente » Cod sursa (job #1438422) | Cod sursa (job #274176) | Cod sursa (job #2029313) | Cod sursa (job #1678486) | Cod sursa (job #1790397)
#include <cstdio>
#include <vector>
#define NMAX 10023
#define pb push_back
using namespace std;
vector<int>adj[NMAX];
int n,m,p;
int l[NMAX],r[NMAX],vis[NMAX];
inline void citire()
{
scanf("%d%d%d",&n,&m,&p);
for(int i=1;i<=p;i++)
{
int a,b;
scanf("%d%d",&a,&b);
adj[a].pb(b);
}
}
int pairup(int nod)
{
if(vis[nod]) return 0;
vis[nod]=1;
vector<int>::iterator it;
for(it=adj[nod].begin();it!=adj[nod].end();++it)
{
if(!r[*it])
{
l[nod]=*it;
r[*it]=nod;
return 1;
}
}
for(it=adj[nod].begin();it!=adj[nod].end();++it)
{
if(pairup(r[*it]))
{
l[nod]=*it;
r[*it]=nod;
return 1;
}
}
return 0;
}
inline void conectare()
{
for(int c=1;c!=0;)
{
c=0;
for(int i=1;i<=n;i++)
{
if(l[i]==0) c|=pairup(i);
}
for(int i=1;i<=n;i++) vis[i]=0;
}
}
inline void afisare()
{
int ct=0;
for(int i=1;i<=n;i++) if(l[i]!=0) ++ct;
printf("%d\n",ct);
for(int i=1;i<=n;i++) if(l[i]!=0) printf("%d %d\n",i,l[i]);
}
int main()
{
freopen ("cuplaj.in","r",stdin);
freopen ("cuplaj.out","w",stdout);
citire();
conectare();
afisare();
}