[Lemon-commits] deba: r3517 - lemon/trunk/lemon
Lemon SVN
svn at lemon.cs.elte.hu
Sat Dec 20 23:45:50 CET 2008
Author: deba
Date: Sat Dec 20 23:45:48 2008
New Revision: 3517
Modified:
lemon/trunk/lemon/unionfind.h
Log:
Backport hg commit [52c04a2a652c] (ticket #197)
Modified: lemon/trunk/lemon/unionfind.h
==============================================================================
--- lemon/trunk/lemon/unionfind.h (original)
+++ lemon/trunk/lemon/unionfind.h Sat Dec 20 23:45:48 2008
@@ -1177,10 +1177,10 @@
int pd = nodes[jd].parent;
if (nodes[nodes[jd].next].size < cmax) {
pushLeft(nodes[jd].next, nodes[jd].left);
- if (less(nodes[jd].left, nodes[jd].next)) {
- nodes[nodes[jd].next].prio = nodes[nodes[jd].left].prio;
- nodes[nodes[jd].next].item = nodes[nodes[jd].left].item;
- }
+ if (nodes[jd].item == nodes[pd].item) {
+ nodes[nodes[jd].next].prio = nodes[jd].prio;
+ nodes[nodes[jd].next].item = nodes[jd].item;
+ }
popLeft(pd);
deleteNode(jd);
jd = pd;
@@ -1188,9 +1188,10 @@
int ld = nodes[nodes[jd].next].left;
popLeft(nodes[jd].next);
pushRight(jd, ld);
- if (less(ld, nodes[jd].left)) {
+ if (less(ld, nodes[jd].left) ||
+ nodes[ld].item == nodes[pd].item) {
nodes[jd].item = nodes[ld].item;
- nodes[jd].prio = nodes[jd].prio;
+ nodes[jd].prio = nodes[ld].prio;
}
if (nodes[nodes[jd].next].item == nodes[ld].item) {
setPrio(nodes[jd].next);
@@ -1219,10 +1220,10 @@
int pd = nodes[jd].parent;
if (nodes[nodes[jd].prev].size < cmax) {
pushRight(nodes[jd].prev, nodes[jd].right);
- if (less(nodes[jd].right, nodes[jd].prev)) {
- nodes[nodes[jd].prev].prio = nodes[nodes[jd].right].prio;
- nodes[nodes[jd].prev].item = nodes[nodes[jd].right].item;
- }
+ if (nodes[jd].item == nodes[pd].item) {
+ nodes[nodes[jd].prev].prio = nodes[jd].prio;
+ nodes[nodes[jd].prev].item = nodes[jd].item;
+ }
popRight(pd);
deleteNode(jd);
jd = pd;
@@ -1230,9 +1231,10 @@
int ld = nodes[nodes[jd].prev].right;
popRight(nodes[jd].prev);
pushLeft(jd, ld);
- if (less(ld, nodes[jd].right)) {
+ if (less(ld, nodes[jd].right) ||
+ nodes[ld].item == nodes[pd].item) {
nodes[jd].item = nodes[ld].item;
- nodes[jd].prio = nodes[jd].prio;
+ nodes[jd].prio = nodes[ld].prio;
}
if (nodes[nodes[jd].prev].item == nodes[ld].item) {
setPrio(nodes[jd].prev);
@@ -1400,7 +1402,14 @@
}
push(new_id, right_id);
pushRight(new_id, ~(classes[r].parent));
- setPrio(new_id);
+
+ if (less(~classes[r].parent, right_id)) {
+ nodes[new_id].item = nodes[~classes[r].parent].item;
+ nodes[new_id].prio = nodes[~classes[r].parent].prio;
+ } else {
+ nodes[new_id].item = nodes[right_id].item;
+ nodes[new_id].prio = nodes[right_id].prio;
+ }
id = nodes[id].parent;
classes[r].parent = ~new_id;
@@ -1440,7 +1449,14 @@
}
push(new_id, left_id);
pushLeft(new_id, ~(classes[l].parent));
- setPrio(new_id);
+
+ if (less(~classes[l].parent, left_id)) {
+ nodes[new_id].item = nodes[~classes[l].parent].item;
+ nodes[new_id].prio = nodes[~classes[l].parent].prio;
+ } else {
+ nodes[new_id].item = nodes[left_id].item;
+ nodes[new_id].prio = nodes[left_id].prio;
+ }
id = nodes[id].parent;
classes[l].parent = ~new_id;
More information about the Lemon-commits
mailing list