Pagini recente » Cod sursa (job #1172007) | Cod sursa (job #1083343) | Cod sursa (job #2610041) | Cod sursa (job #1999606) | Cod sursa (job #553212)
Cod sursa(job #553212)
#include<iostream>
#include<fstream>
#include<algorithm>
#include<vector>
using namespace std;
#define nmax 10000
vector<int> graf[nmax];
int l[nmax];
int r[nmax];
int viz[nmax];
int i,j,n,m,card,e,k;
int cupleaza(int i)
{
vector<int>::iterator j;
if(viz[i] == 1)
return 0;
viz[i] = 1;
for(j = graf[i].begin();j!=graf[i].end();j++)
if(r[*j] == 0)
{
l[i] = *j;
r[*j] = i;
return 1;
}
for(j = graf[i].begin();j!=graf[i].end();j++)
if(cupleaza(r[*j]) == 1)
{
l[i] = *j;
r[*j] = i;
return 1;
}
return 0;
}
int main()
{
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
fin>>n>>m>>e;
for(k=1;k<=e;k++)
{
fin>>i>>j;
graf[i].push_back(j);
}
for(i=1;i<=n;i++)
{
if(l[i] == 0)
{
for(j=1;j<=n;j++)
viz[j] = 0;
card = card + cupleaza(i);
}
else
card++;
}
fout<<card<<"\n";
for(j=1;j<=m;j++)
if(r[j]!=0)
fout<<r[j]<<" "<<j<<"\n";
return 0;
}