Pagini recente » Cod sursa (job #2496791) | Cod sursa (job #1433983) | Cod sursa (job #3295184) | Cod sursa (job #2895771) | Cod sursa (job #1935896)
#include <cstdio>
#include <cstring>
#include <vector>
#include <bitset>
using namespace std;
FILE *f=fopen("cuplaj.in","r");
FILE *g=fopen("cuplaj.out","w");
int T,N,M,E;
vector<int> G[10001];
int L[10001];
int R[10001];
bitset<10001> U;
int nr;
bool ok;
bool pairup(int x)
{
if(U[x])
return 0;
U[x]=1;
for(auto it:G[x])
{
if(!R[it]||pairup(R[it]))
{
R[it]=x;
L[x]=it;
return 1;
}
}
return 0;
}
int main()
{
///fscanf(f,"%d",&T);
T=1;
while(T)
{
nr=0;
memset(L,0,sizeof(L));
memset(R,0,sizeof(R));
fscanf(f,"%d%d%d",&N,&M,&E);
for(int i=1;i<=N;i++) G[i].clear();
for(int i=1;i<=E;i++)
{
int x,y;
fscanf(f,"%d%d",&x,&y);
G[x].push_back(y);
}
do
{
U.reset();
ok=0;
for(int i=1;i<=N;i++)
{
if(L[i]) continue;
if(pairup(i))
ok=1,nr++;
}
}
while(ok);
fprintf(g,"%d\n",nr);
for(int i=1;i<=N;i++)
if(L[i])
fprintf(g,"%d %d\n",i,L[i]);
T--;
}
return 0;
}