Pagini recente » Cod sursa (job #2414797) | Cod sursa (job #129790) | Cod sursa (job #1653964) | Cod sursa (job #664668) | Cod sursa (job #796976)
Cod sursa(job #796976)
#include <iostream>
#include <fstream>
#include <vector>
#define dim 10005
using namespace std;
int g1[dim], g2[dim];
bool viz[dim];
vector <int> a[dim];
int n,m,l;
bool match(int nod)
{
if(viz[nod])
return false;
viz[nod]=true;
for (int i=0; i<a[nod].size();i++)//try direct pair up
if(g2[a[nod][i]]==0)//can pair it up
{
g1[nod]=a[nod][i];
g2[a[nod][i]]=nod;
return true;
}
for (int i=0; i<a[nod].size();i++)
if(match(g2[a[nod][i]]))//try to pair up the node connected to this one
{
g1[nod]=a[nod][i];
g2[a[nod][i]]=nod;
return true;
}
return false;
}
int main()
{
ifstream cin("cuplaj.in");
ofstream cout("cuplaj.out");
cin>>n>>m>>l;
int t1,t2;
for (int i=0; i<l; i++)
{
cin>>t1>>t2;
a[t1].push_back(t2);
}
bool r = true;//run flag
while(r)
{
r = false;
for (int i=0;i<=n;i++)//mark all as unvisited
viz[i]=false;
for (int i=1;i<=n;i++)
if (!g1[i])//not paired
r = match(i) | r;
}
int count=0;
for(int i=1;i<=n;i++)
if(g1[i]!=0)
count++;
cout<<count<<endl;
for(int i=1;i<=n;i++)
if(g1[i]!=0)
cout<<i<<" "<<g1[i]<<endl;
return 0;
}