Pagini recente » Cod sursa (job #1022229) | Cod sursa (job #877815) | Cod sursa (job #2979560) | Cod sursa (job #2667999) | Cod sursa (job #1137225)
#include<fstream>
#include<vector>
#include <cstring>
using namespace std;
int N,M,nrmuchii,stang[10005],u[10005],drept[10005],cuplaj;
vector <int> v[10005];
void citire() {
ifstream in("cuplaj.in");
int i,x,y;
in>>N>>M>>nrmuchii;
for(i=1;i<=nrmuchii;i++) {
in>>x>>y;
v[x].push_back(y);
}
in.close();
}
int pairup( int nod) {
int vecin,i;
if(u[nod])
return 0;
u[nod]=1;
for(i=0;i<v[nod].size();i++){
vecin=v[nod][i];
if(drept[vecin]==0) {
stang[nod]=vecin;
drept[vecin]=nod;
return 1;
}
}
for(i=0;i<v[nod].size();i++) {
vecin=v[nod][i];
if(pairup(drept[vecin])) {
stang[nod]=vecin;
drept[vecin]=nod;
return 1;
}
}
return 0;
}
void solve() {
int ok,i;
ok=1;
while(ok) {
ok=0;
memset(u, 0, sizeof(u));
for(i=1;i<=N;i++)
if(stang[i]==0)
if(pairup(i))
ok=1;
}
for(i=1;i<=N;i++)
if(stang[i]>0)
cuplaj++;
}
void afisare() {
ofstream out("cuplaj.out");
int i;
out<<cuplaj<<'\n';
for(i=1;i<=N;i++) {
if(stang[i]>0)
out<<i<<' '<<stang[i]<<'\n';
}
out.close();
}
int main() {
citire();
solve();
afisare();
return 0 ;
}