Pagini recente » Cod sursa (job #2121514) | Diferente pentru calibrare-limite-de-timp intre reviziile 221 si 82 | Diferente pentru calibrare-limite-de-timp intre reviziile 84 si 85 | Diferente pentru calibrare-limite-de-timp intre reviziile 221 si 138 | Cod sursa (job #2018945)
#include<iostream>
#include<cmath>
#include<algorithm>
#include<fstream>
#include<vector>
#include<cctype>
#include<bitset>
#include<queue>
#include<iomanip>
#include<cmath>
#include<cstring>
using namespace std;
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
int n,m,e,a,b,x[10005],y[10005],nr,v[10005];
vector<int>gr[10005];
int ve(int nod)
{
if(v[nod]==1)
return 0;
v[nod]=1;
for(auto i:gr[nod])
if(y[i]==0)
{
x[nod]=1;
y[i]=nod;
return 1;
}
for(auto i:gr[nod])
if(y[i]!=nod&&ve(y[i]))
{
x[nod]=1;
y[i]=nod;
return 1;
}
return 0;
}
int main()
{
fin>>n>>m>>e;
for(int i=1;i<=e;i++)
{
fin>>a>>b;
gr[a].push_back(b);
}
int p=1;
while(p)
{
p=0;
for(int i=1;i<=n;i++)
v[i]=0;
for(int i=1;i<=n;i++)
if(x[i]==0&&ve(i))
{
p=1;
nr++;
}
}
fout<<nr<<'\n';
for(int i=1;i<=m;i++)
if(y[i]!=0)
fout<<y[i]<<' '<<i<<'\n';
}