Pagini recente » Cod sursa (job #2899572) | Cod sursa (job #2705120) | Cod sursa (job #295460) | Cod sursa (job #1005357) | Cod sursa (job #566193)
Cod sursa(job #566193)
#include<fstream>
#include<vector>
using namespace std;
ifstream fi ("cuplaj.in");
ofstream fo ("cuplaj.out");
vector <int> v[10001];
int 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])
ok=cuplaj(i);
}
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;
}