Pagini recente » Cod sursa (job #1335901) | Cod sursa (job #743821) | Cod sursa (job #2110219) | Cod sursa (job #3282325) | Cod sursa (job #2279917)
#include <bits/stdc++.h>
using namespace std;
ifstream f("cuplaj.in");
ofstream g("cuplaj.out");
const int NMAX=1e4+5;
int L[NMAX], R[NMAX];
int N, M, E, i, om, meserie;
int done, ans;
bool Marked[NMAX];
vector <int> V[NMAX];
bool cupleaza (int node)
{
Marked[node]=true; //am incercat;
for(auto it : V[node])
if(!R[it])
{
L[node]=it;
R[it]=node;
return 1;
}
for(auto it : V[node])
if(!Marked[R[it]] && cupleaza(R[it]))
{
L[node]=it;
R[it]=node;
return 1;
}
return 0;
}
int main()
{
f>>N>>M>>E;
for(i=1; i<=E; ++i)
{
f>>om>>meserie;
V[om].push_back(meserie);
}
done=1;
while(done)
{
done=0;
for(i=1; i<=N; i++)
Marked[i]=false;
for(i=1; i<=N; i++)
if(!L[i] && !Marked[i])
done|=cupleaza(i);
}
for(i=1; i<=N; i++)
if(L[i]!=0)
ans++;
g<<ans<<'\n';
for(i=1; i<=N; i++)
if(L[i])
g<<i<<' '<<L[i]<<'\n';
return 0;
}