Pagini recente » Cod sursa (job #1601136) | Cod sursa (job #2612087) | Cod sursa (job #2633090) | Cod sursa (job #218971) | Cod sursa (job #1625340)
#include <fstream>
#include <vector>
#include <cstdio>
#include <cstring>
using namespace std;
ofstream g("cuplaj.out");
long n,i,sav,m,e,ok,viz[20005],u,v,C[20005];
vector<int> G[20005];
void cup(long nod)
{
for (int i=0;i<G[nod].size();i++)
if (C[G[nod][i]]==0)
{
C[nod]=G[nod][i];
C[G[nod][i]]=nod;
return ;
}
}
void greedy()
{
for (int i=1;i<=n;i++)
{
if (C[i]==0)
cup(i);
}
}
void cupleaza(long a,long b)
{
C[a]=b;
C[b]=a;
}
void decupleaza(long a)
{
C[a]=0;
}
bool dfs(long nod)
{
viz[nod]=sav;
for (int i=0;i<G[nod].size();i++)
{
if (viz[G[nod][i]]!=sav)
{
if (C[G[nod][i]]!=0)
{
viz[G[nod][i]]=sav;
if (dfs(C[G[nod][i]]))
{
decupleaza(C[nod]);
cupleaza(nod,G[nod][i]);
return 1;
}
}
else
{
decupleaza(C[nod]);
cupleaza(nod,G[nod][i]);
return 1;
}
}
}
return 0;
}
int main()
{
freopen("cuplaj.in","r",stdin);
scanf("%ld%ld%ld",&n,&m,&e);
for (i=1;i<=e;i++)
{
scanf("%ld%ld",&u,&v);
v+=n;
G[u].push_back(v);
G[v].push_back(u);
}
greedy();
for (i=1;i<=n;i++)
{
if (C[i]==0)
{
sav=i;
//dfs(i);
}
}
long nr=0;
for (i=1;i<=n;i++)
if(C[i]!=0)
nr++;
g<<nr<<'\n';
for (i=1;i<=n;i++)
if (C[i]!=0)
g<<i<<' '<<C[i]-n<<'\n';
return 0;
}