Pagini recente » Cod sursa (job #1122220) | Cod sursa (job #2030800) | Cod sursa (job #3215713) | Cod sursa (job #2760490) | Cod sursa (job #1318231)
#include <fstream>
#include <vector>
#include <cstring>
using namespace std;
vector <int> G[10010];
int N1,N2,M;
int D[10010],S[10010],Sol;
bool used[10010];
void Citire() {
ifstream in("cuplaj.in");
int i,x,y;
in>>N1>>N2>>M;
for(i=1;i<=M;i++) {
in>>x>>y;
G[x].push_back(y);
}
in.close();
}
int Pair_Up(int nod) {
if(used[nod])
return 0;
used[nod]=1;
for(int i=0;i<G[nod].size();i++) {
int vecin=G[nod][i];
if(D[vecin]==0) {
S[nod]=vecin;
D[vecin]=nod;
return 1;
}
}
for(int i=0;i<G[nod].size();i++) {
int vecin=G[nod][i];
if(Pair_Up(D[vecin])) {
S[nod]=vecin;
D[vecin]=nod;
return 1;
}
}
return 0;
}
void Solve() {
int ok=1;
while(ok){
ok=0;
memset(used, 0, sizeof(used));
for(int i=1;i<=N1;i++)
if(S[i]==0)
if(Pair_Up(i))
ok=1;
}
for(int i=1;i<=N1;i++)
if(S[i])
Sol++;
}
void Afisare() {
ofstream out("cuplaj.out");
out<<Sol<<'\n';
for(int i=1;i<=N1;i++)
if(S[i])
out<<i<<" "<<S[i]<<'\n';
out.close();
}
int main () {
Citire();
Solve();
Afisare();
return 0;
}