Pagini recente » Cod sursa (job #2581678) | Cod sursa (job #2140611) | Cod sursa (job #72811) | Cod sursa (job #255723) | Cod sursa (job #1914371)
#include <cstdio>
#include <bitset>
#include <vector>
#define Nmax 10005
using namespace std;
int n,m,e;
int st[Nmax],dr[Nmax];
vector <int> graf[Nmax];
bitset <Nmax> viz;
void read()
{
freopen("cuplaj.in","r",stdin);
freopen("cuplaj.out","w",stdout);
scanf("%d %d %d",&n,&m,&e);
int x,y;
for(int i = 0 ; i < e ; i++)
{
scanf("%d %d",&x,&y);
graf[x].push_back(y);
}
}
int cmgb(int nod)
{
if(viz[nod] == true)
return false;
viz[nod] = true;
for(vector <int> :: iterator it = graf[nod].begin() ; it != graf[nod].end() ; it++)
if(!st[*it])
{
dr[nod] = *it;
st[*it] = nod;
return true;
}
for(vector <int> :: iterator it = graf[nod].begin() ; it != graf[nod].end() ; it++)
if(cmgb(st[*it]))
{
dr[nod] = *it;
st[*it] = nod;
return true;
}
return false;
}
void Solution()
{
bool done = false;
int answer= 0;
while(!done)
{
done = true;
viz.reset();
for(int i = 1 ; i <= n ; i++)
if(!dr[i] && cmgb(i))
{
answer++;
done = 0;
}
}
printf("%d\n",answer);
for(int i = 1 ; i <= n ; i++)
if(dr[i] != 0)
printf("%d %d\n",i,dr[i]);
}
int main()
{
read();
Solution();
return 0;
}