Pagini recente » Cod sursa (job #1736054) | Cod sursa (job #1596521) | Cod sursa (job #1755053) | Cod sursa (job #928883) | Cod sursa (job #1550097)
#include <iostream>
#include<fstream>
#include<stdlib.h>
using namespace std;
int *l,**v,*c,na,*viz,n,m,*visit;
int dfs(int i)
{
viz[i]=1;
for(int j=1;j<=l[i];j++)
{
int k=v[i][j];
if(viz[k]||c[i]==k) continue;
if(c[k]==-1)
{
viz[k]=1;
c[k]=i;
c[i]=k;
return 1;}
else{ viz[k]=1;
if(dfs(c[k]))
{
c[i]=k;
c[k]=i;
return 1;
}
else continue;
}
}
return 0;
}
int main()
{ int i,x,y,e,j;
ifstream f("cuplaj.in");
f>>n>>m>>e;
l=(int*)calloc(n+1,sizeof(int));
c=(int*)calloc(n+m+5,sizeof(int));
viz=(int*)calloc(n+m+5,sizeof(int));
v=(int**)calloc(n+1,sizeof(int));
visit=(int*)calloc(n+1,sizeof(int));
for(i=1;i<=e;i++)
{
f>>x>>y;
visit[x]++;
}
f.close();
ifstream fcin("cuplaj.in");
for(i=1;i<=n;i++)
v[i]=(int*)calloc(visit[i]+1,sizeof(int));
fcin>>n>>m>>e;
for(i=1;i<=e;i++)
{
fcin>>x>>y;
v[x][++l[x]]=y+n;
}
for(i=1;i<=n+m;i++)
c[i]=-1;
for(i=1;i<=n;i++)
for(j=1;j<=l[i];j++)
if(viz[i]==0&&viz[v[i][j]]==0)
{
viz[i]=1;
viz[v[i][j]]=1;
c[i]=v[i][j];
c[v[i][j]]=i;
break;
}
int ok=1;
na=n;
while(ok)
{
ok=0;
for(i=1;i<=n+m;i++)
viz[i]=0;
for(i=1;i<=na;i++)
if(!viz[i]&&c[i]==-1)
if(dfs(i))
ok=1;
}
int nr=0;
for(i=1;i<=n;i++)
if(c[i]!=-1)
nr++;
ofstream g("cuplaj.out");
g<<nr<<endl;
for(i=1;i<=n;i++)
if(c[i]!=-1)
g<<i<<' '<<c[i]-n<<endl;
return 0;
}