Pagini recente » Cod sursa (job #1040459) | Cod sursa (job #1868079) | Cod sursa (job #226924) | Profil mariaecaterina | Cod sursa (job #1723530)
#include <cstdio>
#include <vector>
using namespace std;
#define MAXN 10000
vector <int> G[2*MAXN+1];
int pereche[2*MAXN+1];
int con;
int vf[2*MAXN+1];
inline int myfind(int nod){
int i;
i=0;
while(i<G[nod].size()&&pereche[G[nod][i]]>0)
i++;
if(i==G[nod].size()){
i=0;
while(i<G[nod].size()){
vf[nod]=con;
if(vf[pereche[G[nod][i]]]<con&&pereche[G[nod][i]]!=nod&&myfind(pereche[G[nod][i]])==1){
pereche[G[nod][i]]=nod;
pereche[nod]=G[nod][i];
return 1;
}
i++;
}
return 0;
}
else{
pereche[G[nod][i]]=nod;
pereche[nod]=G[nod][i];
return 1;
}
}
int main(){
FILE*fi,*fout;
int N,M,E,i,x,y;
fi=fopen("cuplaj.in" ,"r");
fout=fopen("cuplaj.out" ,"w");
fscanf(fi,"%d%d%d" ,&N,&M,&E);
for(i=0;i<E;i++){
fscanf(fi,"%d%d" ,&x,&y);
y+=N;
G[x].push_back(y);
G[y].push_back(x);
}
con=1;
for(i=1;i<=N;i++)
if(pereche[i]==0){
x=myfind(i);
con++;
}
con=0;
for(i=1;i<=N;i++)
if(pereche[i]>0)
con++;
fprintf(fout,"%d\n" ,con);
for(i=1;i<=N;i++)
if(pereche[i]>0)
fprintf(fout,"%d %d\n" ,i,pereche[i]-N);
fclose(fi);
fclose(fout);
return 0;
}