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