Pagini recente » Cod sursa (job #1845717) | Cod sursa (job #2592540) | Cod sursa (job #459212) | Cod sursa (job #1255788) | Cod sursa (job #2180338)
#include <iostream>
#include <cstdio>
#include <vector>
#include <cstring>
using namespace std;
vector <int> G[10005];
int N,M,e;
int st[10005],dr[10005],viz[10005];
void citire()
{
scanf("%d%d%d",&N,&M,&e);
int nods,nodd;
for(int i=1;i<=e;i++)
{
scanf("%d%d",&nods,&nodd);
G[nods].push_back(nodd);
}
}
bool solve(int nod)
{
if(viz[nod])
return 0;
viz[nod]=1;
for(auto n:G[nod])
{
if(!st[n])
{
st[n]=nod;
dr[nod]=n;
return 1;
}
}
for(auto n:G[nod])
{
if(solve(st[n]))
{
st[n]=nod;
dr[nod]=n;
return 1;
}
}
return 0;
}
int main()
{
freopen("cuplaj.in","r",stdin);
freopen("cuplaj.out","w",stdout);
citire();
for(bool pos=true;pos;)
{
pos=false;
memset(viz,0,sizeof(viz));
for(int i=1;i<=N;i++)
{
if(!dr[i])
pos|=solve(i);
}
}
int rasp=0;
for(int i=1;i<=N;i++)
rasp+=(dr[i]>0);
printf("%d\n",rasp);
for(int i=1;i<=N;i++)
if(dr[i]>0)
printf("%d %d\n",i,dr[i]);
return 0;
}