Pagini recente » Cod sursa (job #1090741) | Cod sursa (job #1378562) | Cod sursa (job #2974136) | Cod sursa (job #3260961) | Cod sursa (job #353799)
Cod sursa(job #353799)
#include <stdio.h>
#include <vector>
#include <string.h>
#define MAXN 10002
using namespace std;
int stanga[MAXN],dreapta[MAXN];
bool viz[MAXN],ok = true;
int j,x,y,s,d,m,c;
vector<int> a[MAXN];
bool pairUp(int node)
{
int i;
if (viz[node])
{
return false;
}
viz[node] = true;
for (i=0;i<a[node].size();i++)
{
c++;
if (!dreapta[a[node][i]])
{
dreapta[a[node][i]] = node;
stanga[node] = a[node][i];
return true;
}
}
for (i=0;i<a[node].size();i++)
{
if (pairUp(dreapta[a[node][i]]))
{
dreapta[a[node][i]] = node;
stanga[node] = a[node][i];
return true;
}
}
return false;
}
int main()
{
freopen("cuplaj.in","r",stdin);
freopen("cuplaj.out","w",stdout);
int i;
scanf("%d%d%d",&s,&d,&m);
for (i=0;i<m;i++)
{
scanf("%d%d",&x,&y);
a[x].push_back(y);
}
while (ok)
{
ok = false;
memset(viz,0,sizeof(viz));
for (i=1;i<=s;i++)
{
if (!stanga[i])
{
ok |= pairUp(i);
}
}
}
int cuplaj = 0;
for (i=1;i<=s;i++)
{
if (stanga[i])
{
cuplaj++;
}
}
printf("%d\n",cuplaj);
for (i=1;i<=s;i++)
{
if (stanga[i])
{
printf("%d %d\n",i,stanga[i]);
}
}
return 0;
}