[Lemon-commits] Peter Kovacs: Exploit that the standard maps are...
Lemon HG
hg at lemon.cs.elte.hu
Tue Apr 14 11:42:47 CEST 2009
details: http://lemon.cs.elte.hu/hg/lemon/rev/aa1804409f29
changeset: 613:aa1804409f29
user: Peter Kovacs <kpeter [at] inf.elte.hu>
date: Tue Apr 14 10:35:38 2009 +0200
description:
Exploit that the standard maps are reference maps (#190)
diffstat:
lemon/circulation.h | 34 ++++----
lemon/core.h | 110 +++++++++++++-------------
lemon/elevator.h | 146 ++++++++++++++++++------------------
lemon/gomory_hu.h | 28 +++---
lemon/hao_orlin.h | 178 ++++++++++++++++++++++----------------------
lemon/max_matching.h | 100 ++++++++++++------------
lemon/min_cost_arborescence.h | 12 +-
lemon/preflow.h | 62 +++++++-------
test/kruskal_test.cc | 20 ++--
9 files changed, 345 insertions(+), 345 deletions(-)
diffs (truncated from 1947 to 300 lines):
diff --git a/lemon/circulation.h b/lemon/circulation.h
--- a/lemon/circulation.h
+++ b/lemon/circulation.h
@@ -453,13 +453,13 @@
createStructures();
for(NodeIt n(_g);n!=INVALID;++n) {
- _excess->set(n, (*_delta)[n]);
+ (*_excess)[n] = (*_delta)[n];
}
for (ArcIt e(_g);e!=INVALID;++e) {
_flow->set(e, (*_lo)[e]);
- _excess->set(_g.target(e), (*_excess)[_g.target(e)] + (*_flow)[e]);
- _excess->set(_g.source(e), (*_excess)[_g.source(e)] - (*_flow)[e]);
+ (*_excess)[_g.target(e)] += (*_flow)[e];
+ (*_excess)[_g.source(e)] -= (*_flow)[e];
}
// global relabeling tested, but in general case it provides
@@ -482,23 +482,23 @@
createStructures();
for(NodeIt n(_g);n!=INVALID;++n) {
- _excess->set(n, (*_delta)[n]);
+ (*_excess)[n] = (*_delta)[n];
}
for (ArcIt e(_g);e!=INVALID;++e) {
if (!_tol.positive((*_excess)[_g.target(e)] + (*_up)[e])) {
_flow->set(e, (*_up)[e]);
- _excess->set(_g.target(e), (*_excess)[_g.target(e)] + (*_up)[e]);
- _excess->set(_g.source(e), (*_excess)[_g.source(e)] - (*_up)[e]);
+ (*_excess)[_g.target(e)] += (*_up)[e];
+ (*_excess)[_g.source(e)] -= (*_up)[e];
} else if (_tol.positive((*_excess)[_g.target(e)] + (*_lo)[e])) {
_flow->set(e, (*_lo)[e]);
- _excess->set(_g.target(e), (*_excess)[_g.target(e)] + (*_lo)[e]);
- _excess->set(_g.source(e), (*_excess)[_g.source(e)] - (*_lo)[e]);
+ (*_excess)[_g.target(e)] += (*_lo)[e];
+ (*_excess)[_g.source(e)] -= (*_lo)[e];
} else {
Value fc = -(*_excess)[_g.target(e)];
_flow->set(e, fc);
- _excess->set(_g.target(e), 0);
- _excess->set(_g.source(e), (*_excess)[_g.source(e)] - fc);
+ (*_excess)[_g.target(e)] = 0;
+ (*_excess)[_g.source(e)] -= fc;
}
}
@@ -537,16 +537,16 @@
if((*_level)[v]<actlevel) {
if(!_tol.less(fc, exc)) {
_flow->set(e, (*_flow)[e] + exc);
- _excess->set(v, (*_excess)[v] + exc);
+ (*_excess)[v] += exc;
if(!_level->active(v) && _tol.positive((*_excess)[v]))
_level->activate(v);
- _excess->set(act,0);
+ (*_excess)[act] = 0;
_level->deactivate(act);
goto next_l;
}
else {
_flow->set(e, (*_up)[e]);
- _excess->set(v, (*_excess)[v] + fc);
+ (*_excess)[v] += fc;
if(!_level->active(v) && _tol.positive((*_excess)[v]))
_level->activate(v);
exc-=fc;
@@ -561,16 +561,16 @@
if((*_level)[v]<actlevel) {
if(!_tol.less(fc, exc)) {
_flow->set(e, (*_flow)[e] - exc);
- _excess->set(v, (*_excess)[v] + exc);
+ (*_excess)[v] += exc;
if(!_level->active(v) && _tol.positive((*_excess)[v]))
_level->activate(v);
- _excess->set(act,0);
+ (*_excess)[act] = 0;
_level->deactivate(act);
goto next_l;
}
else {
_flow->set(e, (*_lo)[e]);
- _excess->set(v, (*_excess)[v] + fc);
+ (*_excess)[v] += fc;
if(!_level->active(v) && _tol.positive((*_excess)[v]))
_level->activate(v);
exc-=fc;
@@ -579,7 +579,7 @@
else if((*_level)[v]<mlevel) mlevel=(*_level)[v];
}
- _excess->set(act, exc);
+ (*_excess)[act] = exc;
if(!_tol.positive(exc)) _level->deactivate(act);
else if(mlevel==_node_num) {
_level->liftHighestActiveToTop();
diff --git a/lemon/core.h b/lemon/core.h
--- a/lemon/core.h
+++ b/lemon/core.h
@@ -1315,27 +1315,27 @@
virtual void clear() {
for(NodeIt n(_g);n!=INVALID;++n) {
- _head.set(n, INVALID);
+ _head[n] = INVALID;
}
}
void insert(Arc arc) {
Node s = _g.source(arc);
Node t = _g.target(arc);
- _left.set(arc, INVALID);
- _right.set(arc, INVALID);
+ _left[arc] = INVALID;
+ _right[arc] = INVALID;
Arc e = _head[s];
if (e == INVALID) {
- _head.set(s, arc);
- _parent.set(arc, INVALID);
+ _head[s] = arc;
+ _parent[arc] = INVALID;
return;
}
while (true) {
if (t < _g.target(e)) {
if (_left[e] == INVALID) {
- _left.set(e, arc);
- _parent.set(arc, e);
+ _left[e] = arc;
+ _parent[arc] = e;
splay(arc);
return;
} else {
@@ -1343,8 +1343,8 @@
}
} else {
if (_right[e] == INVALID) {
- _right.set(e, arc);
- _parent.set(arc, e);
+ _right[e] = arc;
+ _parent[arc] = e;
splay(arc);
return;
} else {
@@ -1357,27 +1357,27 @@
void remove(Arc arc) {
if (_left[arc] == INVALID) {
if (_right[arc] != INVALID) {
- _parent.set(_right[arc], _parent[arc]);
+ _parent[_right[arc]] = _parent[arc];
}
if (_parent[arc] != INVALID) {
if (_left[_parent[arc]] == arc) {
- _left.set(_parent[arc], _right[arc]);
+ _left[_parent[arc]] = _right[arc];
} else {
- _right.set(_parent[arc], _right[arc]);
+ _right[_parent[arc]] = _right[arc];
}
} else {
- _head.set(_g.source(arc), _right[arc]);
+ _head[_g.source(arc)] = _right[arc];
}
} else if (_right[arc] == INVALID) {
- _parent.set(_left[arc], _parent[arc]);
+ _parent[_left[arc]] = _parent[arc];
if (_parent[arc] != INVALID) {
if (_left[_parent[arc]] == arc) {
- _left.set(_parent[arc], _left[arc]);
+ _left[_parent[arc]] = _left[arc];
} else {
- _right.set(_parent[arc], _left[arc]);
+ _right[_parent[arc]] = _left[arc];
}
} else {
- _head.set(_g.source(arc), _left[arc]);
+ _head[_g.source(arc)] = _left[arc];
}
} else {
Arc e = _left[arc];
@@ -1387,38 +1387,38 @@
e = _right[e];
}
Arc s = _parent[e];
- _right.set(_parent[e], _left[e]);
+ _right[_parent[e]] = _left[e];
if (_left[e] != INVALID) {
- _parent.set(_left[e], _parent[e]);
+ _parent[_left[e]] = _parent[e];
}
- _left.set(e, _left[arc]);
- _parent.set(_left[arc], e);
- _right.set(e, _right[arc]);
- _parent.set(_right[arc], e);
+ _left[e] = _left[arc];
+ _parent[_left[arc]] = e;
+ _right[e] = _right[arc];
+ _parent[_right[arc]] = e;
- _parent.set(e, _parent[arc]);
+ _parent[e] = _parent[arc];
if (_parent[arc] != INVALID) {
if (_left[_parent[arc]] == arc) {
- _left.set(_parent[arc], e);
+ _left[_parent[arc]] = e;
} else {
- _right.set(_parent[arc], e);
+ _right[_parent[arc]] = e;
}
}
splay(s);
} else {
- _right.set(e, _right[arc]);
- _parent.set(_right[arc], e);
- _parent.set(e, _parent[arc]);
+ _right[e] = _right[arc];
+ _parent[_right[arc]] = e;
+ _parent[e] = _parent[arc];
if (_parent[arc] != INVALID) {
if (_left[_parent[arc]] == arc) {
- _left.set(_parent[arc], e);
+ _left[_parent[arc]] = e;
} else {
- _right.set(_parent[arc], e);
+ _right[_parent[arc]] = e;
}
} else {
- _head.set(_g.source(arc), e);
+ _head[_g.source(arc)] = e;
}
}
}
@@ -1430,17 +1430,17 @@
Arc me=v[m];
if (a < m) {
Arc left = refreshRec(v,a,m-1);
- _left.set(me, left);
- _parent.set(left, me);
+ _left[me] = left;
+ _parent[left] = me;
} else {
- _left.set(me, INVALID);
+ _left[me] = INVALID;
}
if (m < b) {
Arc right = refreshRec(v,m+1,b);
- _right.set(me, right);
- _parent.set(right, me);
+ _right[me] = right;
+ _parent[right] = me;
} else {
- _right.set(me, INVALID);
+ _right[me] = INVALID;
}
return me;
}
@@ -1452,46 +1452,46 @@
if (!v.empty()) {
std::sort(v.begin(),v.end(),ArcLess(_g));
Arc head = refreshRec(v,0,v.size()-1);
- _head.set(n, head);
- _parent.set(head, INVALID);
+ _head[n] = head;
+ _parent[head] = INVALID;
}
- else _head.set(n, INVALID);
+ else _head[n] = INVALID;
}
}
void zig(Arc v) {
Arc w = _parent[v];
- _parent.set(v, _parent[w]);
- _parent.set(w, v);
- _left.set(w, _right[v]);
- _right.set(v, w);
+ _parent[v] = _parent[w];
+ _parent[w] = v;
+ _left[w] = _right[v];
+ _right[v] = w;
if (_parent[v] != INVALID) {
if (_right[_parent[v]] == w) {
- _right.set(_parent[v], v);
+ _right[_parent[v]] = v;
} else {
- _left.set(_parent[v], v);
+ _left[_parent[v]] = v;
}
}
if (_left[w] != INVALID){
- _parent.set(_left[w], w);
+ _parent[_left[w]] = w;
}
More information about the Lemon-commits
mailing list