Pagini recente » Cod sursa (job #3132172) | Cod sursa (job #1932998) | Cod sursa (job #1995522) | Cod sursa (job #198506) | Cod sursa (job #566213)
Cod sursa(job #566213)
#include<fstream>
#include<vector>
using namespace std;
ifstream fi ("cuplaj.in");
ofstream fo ("cuplaj.out");
vector <int> v[10001];
int j,sol,s[10001],d[10001],x,y,i,n,m,e;
char viz[10001];
int cuplaj(int x){
if (viz[x])
return 0;
viz[x]=1;
for(int j=0;j<v[x].size();++j)
if(!d[v[x][j]]){
s[x]=v[x][j];
d[v[x][j]]=x;
return 1;
}
for(int j=0;j<v[x].size();++j)
if(cuplaj(d[v[x][j]])){
s[x]=v[x][j];
d[v[x][j]]=x;
return 1;
}
return 0;
}
int main(){
fi>>n>>m>>e;
for(i=1;i<=e;++i){
fi>>x>>y;
v[x].push_back (y);
}
int ok=1;
while(ok){
ok=0;
memset(viz,0,sizeof(viz));
for(i=1;i<=n;++i)
if(!s[i]){
int t=cuplaj(i);
if(t)
ok=t;
}
}
for(i=1;i<=n;++i)
if(s[i])
sol++;
fo<<sol<<'\n';
for(i=1;i<=n;++i)
if(s[i])
fo<<i<<' '<<s[i]<<'\n';
fo.close();
fi.close();
return 0;
}