Pagini recente » Cod sursa (job #1722981) | Istoria paginii utilizator/anca.gd | Istoria paginii runda/simulare_oni_10_z1_2k13/clasament | Arhiva de probleme | Cod sursa (job #900853)
Cod sursa(job #900853)
#include<fstream>
#include<vector>
#include<cstring>
#define dim 10007
using namespace std;
ifstream f("cuplaj.in");
ofstream g("cuplaj.out");
int r[dim],l[dim];
vector<int>G[dim];
int n,m,i,j,sol,ok,viz[dim],e,x,y;
int cuplaj( int x ) {
if(viz[x])
return 0;
viz[x]=1;
for(int i=0;i<G[x].size();++i){
int fiu=G[x][i];
if(!r[fiu] || cuplaj(fiu)){
r[fiu]=x;
l[x]=fiu;
return 1;
}
}
return 0;
}
int main () {
f>>n>>m>>e;
for(i=1;i<=e;++i){
f>>x>>y;
G[x].push_back(y);
}
ok=1;
do{
ok=0;
memset(viz,0,sizeof(viz));
for(i=1;i<=n;++i){
if(!l[i]){
ok|=cuplaj(i);
}
}
}while(ok);
int sol=0;
for(i=1;i<=n;++i){
sol+=(l[i]>0);
}
g<<sol<<"\n";
for(i=1;i<=n;++i){
if(l[i]){
g<<i<<" "<<l[i]<<"\n";
}
}
return 0;
}