Pagini recente » Cod sursa (job #1756125) | Cod sursa (job #2169854) | Cod sursa (job #3248586) | Cod sursa (job #3185377) | Cod sursa (job #2963649)
#include <fstream>
#include<vector>
using namespace std;
ifstream cin("cuplaj.in");
ofstream cout("cuplaj.out");
vector<int>adj[100005];
int fre [100005];
int pairst [100005];
int pairdr [100005];
int find(int curr)
{
int i,k;
if(fre[curr]==1)
{
return 0;
}
fre[curr]=1;
for(i=0;i<adj[curr].size();i++)
{
k=adj[curr][i];
if(pairdr[k]==0)
{
pairdr[k]=curr;
pairst[curr]=k;
return 1;
}
}
for(i=0;i<adj[curr].size();i++)
{
k=adj[curr][i];
if(find(pairdr[k])==1)
{
pairdr[k]=curr;
pairst[curr]=k;
return 1;
}
}
return 0;
}
int main()
{
int n,i,j,l,m,a,b,val,x;
cin>>n>>x>>m;
for(i=1;i<=m;i++)
{
cin>>a>>b;
adj[a].push_back(b);
}
int match=0;
int pos=1;
while(pos==1)
{
pos=0;
for(i=1;i<=n;i++)
{
fre[i]=0;
}
for(i=1;i<=n;i++)
{
if(pairst[i]==0)
{
val=find(i);
pos=max(pos,val);
match=match+val;
}
}
}
cout<<match<<'\n';
for(i=1;i<=n;i++)
{
if(pairst[i]!=0)
{
cout<<i<<" "<<pairst[i]<<'\n';
}
}
return 0;
}