Pagini recente » Cod sursa (job #3242471) | Cod sursa (job #1199374) | Cod sursa (job #2547858) | Cod sursa (job #1365724) | Cod sursa (job #1942390)
#include <cstdio>
#include <vector>
#define NMax 10000
using namespace std;
vector<int> a[NMax+1];
int viz[NMax+1];
int st[NMax+1];
int dr[NMax+1];
int res;
int Cupleaza(int x)
{
if(viz[x]) return 0;
viz[x] = 1;
int i,y;
for(i = 0; i < a[x].size(); ++i)
{
y = a[x][i];
if(!dr[y])
{
dr[y] = x;
st[x] = y;
return 1;
}
}
for(i = 0; i < a[x].size(); ++i)
{
y = a[x][i];
if(Cupleaza(dr[y]))
{
dr[y] = x;
st[x] = y;
return 1;
}
}
return 0;
}
int main(){
FILE* fin = fopen("cuplaj.in","r");
FILE* fout = fopen("cuplaj.out","w");
int i,x,y,stop,N,M,E;
fscanf(fin,"%d %d %d",&N,&M,&E);
for(i = 1; i <= E; ++i)
{
fscanf(fin,"%d %d",&x,&y);
a[x].push_back(y);
}
stop = 1;
while(stop)
{
stop = 0;
for(i = 1; i <= N; ++i) viz[i] = 0;
for(i = 1; i <= N; ++i)
if(!st[i] && Cupleaza(i))
{
++res;
stop = 1;
}
}
fprintf(fout,"%d\n",res);
for(i = 1; i <= N; ++i)
if(st[i]) fprintf(fout,"%d %d\n",i,st[i]);
return 0;
}