Pagini recente » Cod sursa (job #1110352) | Cod sursa (job #1492777) | Cod sursa (job #3256413) | Cod sursa (job #2503329) | Cod sursa (job #1822071)
#include <fstream>
#include <vector>
#include <bitset>
using namespace std;
ifstream f("cuplaj.in");
ofstream g("cuplaj.out");
const int N=10010;
vector<int> v[N];
bool creste(int);
int n,m,q,i,j,ok,sol,S[N],D[N];
bitset<N> viz;
int main()
{
f>>n>>m>>q;
for(;q;q--)
{
f>>i>>j;
v[i].push_back(j);
}
for(ok=1;ok;)
{
ok=0;
viz.reset();
for(i=1;i<=n;i++)
if(!D[i]&&creste(i))
sol++,ok=1;
}
g<<sol<<'\n';
for(i=1;i<=n;i++)
if(D[i])
g<<i<<' '<<D[i]<<'\n';
return 0;
}
bool creste(int i)
{
if(viz[i])
return 0;
viz[i]=1;
for(auto it:v[i])
if(!S[it])
{
D[i]=it;
S[it]=i;
return 1;
}
for(auto it:v[i])
if(!viz[S[it]]&&creste(S[it]))
{
D[i]=it;
S[it]=i;
return 1;
}
return 0;
}