Changes in lemon/unionfind.h [236:da953e387d31:440:88ed40ad0d4f] in lemon-1.2
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
lemon/unionfind.h
r236 r440 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 85 * Copyright (C) 2003-2009 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). … … 1178 1178 if (nodes[nodes[jd].next].size < cmax) { 1179 1179 pushLeft(nodes[jd].next, nodes[jd].left); 1180 if (less(nodes[jd].left, nodes[jd].next)) { 1181 nodes[nodes[jd].next].prio = nodes[nodes[jd].left].prio; 1182 nodes[nodes[jd].next].item = nodes[nodes[jd].left].item; 1180 if (less(jd, nodes[jd].next) || 1181 nodes[jd].item == nodes[pd].item) { 1182 nodes[nodes[jd].next].prio = nodes[jd].prio; 1183 nodes[nodes[jd].next].item = nodes[jd].item; 1183 1184 } 1184 1185 popLeft(pd); … … 1189 1190 popLeft(nodes[jd].next); 1190 1191 pushRight(jd, ld); 1191 if (less(ld, nodes[jd].left)) { 1192 if (less(ld, nodes[jd].left) || 1193 nodes[ld].item == nodes[pd].item) { 1192 1194 nodes[jd].item = nodes[ld].item; 1193 nodes[jd].prio = nodes[ jd].prio;1195 nodes[jd].prio = nodes[ld].prio; 1194 1196 } 1195 1197 if (nodes[nodes[jd].next].item == nodes[ld].item) { … … 1220 1222 if (nodes[nodes[jd].prev].size < cmax) { 1221 1223 pushRight(nodes[jd].prev, nodes[jd].right); 1222 if (less(nodes[jd].right, nodes[jd].prev)) { 1223 nodes[nodes[jd].prev].prio = nodes[nodes[jd].right].prio; 1224 nodes[nodes[jd].prev].item = nodes[nodes[jd].right].item; 1224 if (less(jd, nodes[jd].prev) || 1225 nodes[jd].item == nodes[pd].item) { 1226 nodes[nodes[jd].prev].prio = nodes[jd].prio; 1227 nodes[nodes[jd].prev].item = nodes[jd].item; 1225 1228 } 1226 1229 popRight(pd); … … 1231 1234 popRight(nodes[jd].prev); 1232 1235 pushLeft(jd, ld); 1233 if (less(ld, nodes[jd].right)) { 1236 if (less(ld, nodes[jd].right) || 1237 nodes[ld].item == nodes[pd].item) { 1234 1238 nodes[jd].item = nodes[ld].item; 1235 nodes[jd].prio = nodes[ jd].prio;1239 nodes[jd].prio = nodes[ld].prio; 1236 1240 } 1237 1241 if (nodes[nodes[jd].prev].item == nodes[ld].item) { … … 1251 1255 return comp(nodes[id].prio, nodes[jd].prio); 1252 1256 } 1253 1254 bool equal(int id, int jd) const {1255 return !less(id, jd) && !less(jd, id);1256 }1257 1258 1257 1259 1258 public: … … 1401 1400 push(new_id, right_id); 1402 1401 pushRight(new_id, ~(classes[r].parent)); 1403 setPrio(new_id); 1402 1403 if (less(~classes[r].parent, right_id)) { 1404 nodes[new_id].item = nodes[~classes[r].parent].item; 1405 nodes[new_id].prio = nodes[~classes[r].parent].prio; 1406 } else { 1407 nodes[new_id].item = nodes[right_id].item; 1408 nodes[new_id].prio = nodes[right_id].prio; 1409 } 1404 1410 1405 1411 id = nodes[id].parent; … … 1441 1447 push(new_id, left_id); 1442 1448 pushLeft(new_id, ~(classes[l].parent)); 1443 setPrio(new_id); 1449 1450 if (less(~classes[l].parent, left_id)) { 1451 nodes[new_id].item = nodes[~classes[l].parent].item; 1452 nodes[new_id].prio = nodes[~classes[l].parent].prio; 1453 } else { 1454 nodes[new_id].item = nodes[left_id].item; 1455 nodes[new_id].prio = nodes[left_id].prio; 1456 } 1444 1457 1445 1458 id = nodes[id].parent;
Note: See TracChangeset
for help on using the changeset viewer.