Pagini recente » Cod sursa (job #1318913) | Cod sursa (job #819121) | Cod sursa (job #4133) | Cod sursa (job #1687286) | Cod sursa (job #867295)
Cod sursa(job #867295)
#include <cstdio>
#include <fstream>
#include <vector>
using namespace std;
const int N=10001;
vector<int> G[N],L,R;
vector<bool> U;
int n,m,SOL;
void READ ()
{
ifstream in ("cuplaj.in");
in>>n>>m>>m;
for(int x,y;m;--m)
{
in>>x>>y;
G[x].push_back(y);
}
}
bool CUPLEAZA (int nod)
{
if( U[nod] )
return 0;
U[nod]=1;
for(vector<int>::iterator it=G[nod].begin();it<G[nod].end();++it)
if( !R[*it] || CUPLEAZA(R[*it]) )
{
R[*it]=nod;
L[nod]=*it;
return 1;
}
return 0;
}
void SOLVE ()
{
L.resize(n+1);
R.resize(n+1);
for(bool ok=1;ok;)
{
U.assign(n+1,0);
ok=0;
for(int i=1;i<=n;++i)
if( !L[i] && CUPLEAZA(i) )
{
ok=1;
++SOL;
}
}
}
void OUT ()
{
freopen ("cuplaj.out","w",stdout);
printf("%d\n",SOL);
for(int i=1;i<=n;++i)
if(L[i])
printf("%d %d\n",i,L[i]);
}
int main ()
{
READ ();
SOLVE ();
OUT ();
return 0;
}