Pagini recente » Cod sursa (job #435033) | Cod sursa (job #353892) | Cod sursa (job #245976) | Cod sursa (job #2569037) | Cod sursa (job #1013430)
#include <fstream>
#include <bitset>
#include <vector>
using namespace std;
vector<int> v[10005];
bitset<10005> viz;
int dr[10005];
int st[10005];
bool cupl(int unde)
{
if(viz[unde])
return 0;
viz[unde]=1;
vector<int>::iterator it;
//if(!st[unde])
//{
for(it=v[unde].begin();it!=v[unde].end();it++)
if(!dr[*it])
{
st[unde]=*it;
dr[*it]=unde;
return 1;
}
for(it=v[unde].begin();it!=v[unde].end();it++)
if(cupl(dr[*it]))
{
st[unde]=*it;
dr[*it]=unde;
return 1;
}
//}
return 0;
}
int main()
{
ifstream cin("cuplaj.in");
ofstream cout("cuplaj.out");
int n,m,e,i,a,b;
cin>>n>>m>>e;
for(i=0;i<e;i++)
{
cin>>a>>b;
v[a].push_back(b);
}
bool cont=1;
while(cont)
{
cont=0;
for(i=1;i<=n;i++)
viz[i]=0;
for(i=1;i<=n;i++)
if(!st[i] && cupl(i))
cont=1;
}
int cate=0;
for(i=1;i<=n;i++)
if(st[i])
cate++;
cout<<cate<<'\n';
for(i=1;i<=n;i++)
if(st[i])
cout<<i<<' '<<st[i]<<'\n';
cin.close();
cout.close();
return 0;
}