Pagini recente » Cod sursa (job #607836) | Cod sursa (job #1917818) | Cod sursa (job #710898) | Cod sursa (job #1234024) | Cod sursa (job #2061143)
#include<fstream>
#include<vector>
using namespace std;
const int dim = 1e5 + 5;
ifstream in ("cuplaj.in");
ofstream out ("cuplaj.out");
int dreapta[dim],stanga[dim],st,dr,m,a,b;
bool marked[dim],ok;
vector<int>v[dim];
bool dfs (int knot) {
int vecin;
if (marked[knot])
return false;
marked[knot] = true;
for (int i = false; i < v[knot].size(); i ++) {
vecin = v[knot][i];
if (dreapta[vecin] == false) {
stanga[knot] = vecin;
dreapta[vecin] = knot;
return true;
}
}
for (int i = false; i < v[knot].size(); i ++) {
vecin = v[knot][i];
if (dfs (dreapta[vecin])) {
stanga[knot] = vecin;
dreapta[vecin] = knot;
return true;
}
}
return false;
}
int main (void) {
in >> st >> dr >> m;
for (int i = true; i <= m; i ++) {
in >> a >> b;
v[a].push_back (b);
}
ok = true;
while (ok) {
for (int i = true; i <= st; i ++) {
marked[i] = false;
}
ok = false;
for (int i = true; i <= st; i ++) {
if (!stanga[i] && dfs(i)){
ok = true;
}
}
}
for (int i = true; i <= st; i ++) {
if (stanga[i] != false) {
out << i <<" "<< stanga[i] <<"\n";
}
}
return false;
}