Pagini recente » Cod sursa (job #1010946) | Cod sursa (job #1900629) | Cod sursa (job #2307366) | Cod sursa (job #3128380) | Cod sursa (job #1258642)
#include <vector>
#include <set>
#include <algorithm>
#include <cctype>
#include <cstdlib>
#include <cmath>
#include <stack>
#include <queue>
#include <cstring>
#include <string>
#include <cstdio>
#include <climits>
#define PII pair < int , int >
#define MP make_pair
#define PB push_back
#define F first
#define S second
#define LL long long
#define NMAX 20
using namespace std;
int m,n,e,st[10001],dr[10001],u[10001],nr,i,x,y,cup;
vector <int> g[100091];
int cuplaj(int nod)
{
if(u[nod]) {return 0;}
u[nod]=1;
for (vector < int > :: iterator it = g[nod].begin(); it != g[nod].end(); it ++)
{
if(cuplaj(st[*it]) || st[*it]==0 )
{
st[*it]=nod;
dr[nod]=*it;
return 1;
}
}
return 0;
}
int main()
{
freopen("cuplaj.in","r",stdin);
freopen("cuplaj.out","w",stdout);
scanf("%d %d %d",&n,&m,&e);
for(i=1;i<=e;i++)
{
scanf("%d %d",&x,&y);
g[x].PB(y);
}
cup=1;
while(cup)
{
cup=0;
memset(u,0,sizeof(u));
for(i=1;i<=n;i++)
{
if(dr[i]==0) {cup+=cuplaj(i);}
}
}
for(i=1;i<=n;i++)
{
if(dr[i]) nr++;
}
printf("%d\n",nr);
for(i=1;i<=n;i++)
{
if(dr[i])
{
printf("%d %d\n",i,dr[i]);
}
}
return 0;
}