Pagini recente » Cod sursa (job #2821881) | Cod sursa (job #2822094) | Cod sursa (job #2755784) | Cod sursa (job #108703) | Cod sursa (job #1928655)
#include <cstdio>
#include <vector>
#include <bitset>
using namespace std;
FILE *f=fopen("cuplaj.in","r");
FILE *g=fopen("cuplaj.out","w");
int N,M,K;
vector<int> G[10005];
int L[10005];
int R[10005];
bitset<10005> U;
bool pairup(int x)
{
if(U[x])
return 0;
U[x]=1;
for(auto it:G[x])
if(R[it]==0||pairup(R[it]))
{L[x]=it,R[it]=x;return 1;}
return 0;
}
int main()
{
fscanf(f,"%d%d%d",&N,&M,&K);
for(int i=1;i<=K;i++)
{
int x,y;
fscanf(f,"%d%d",&x,&y);
G[x].push_back(y);
}
bool ok=1;
int c=0;
while(ok)
{
ok=0;
U.reset();
for(int i=1;i<=N;i++)
if(L[i]==0)
if(pairup(i))
c++,ok=1;
}
fprintf(g,"%d\n",c);
for(int i=1;i<=N;i++)
if(L[i])
fprintf(g,"%d %d\n",i,L[i]);
fclose(f);
fclose(g);
return 0;
}