docs: @Override
      public float calculatePriority(int node) {
          CalcShortcutsResult calcShortcutsResult = calcShortcutCount(node);
  
          // # huge influence: the bigger the less shortcuts gets created and the faster is the preparation
          //
          // every adjNode has an 'original edge' number associated. initially it is r=1
          // when a new shortcut is introduced then r of the associated edges is summed up:
          // r(u,w)=r(u,v)+r(v,w) now we can define
          // originalEdgesCount = σ(v) := sum_{ (u,w) ∈ shortcuts(v) } of r(u, w)
          int originalEdgesCount = calcShortcutsResult.originalEdgesCount;
  
          // # lowest influence on preparation speed or shortcut creation count
          // (but according to paper should speed up queries)
          //
          // number of already contracted neighbors of v
          int contractedNeighbors = 0;
          int degree = 0;
          CHEdgeIterator iter = remainingEdgeExplorer.setBaseNode(node);
          while (iter.next()) {
              degree++;
              if (iter.isShortcut())
                  contractedNeighbors++;
          }
  
          // from shortcuts we can compute the edgeDifference
          // # low influence: with it the shortcut creation is slightly faster
          //
          // |shortcuts(v)| − |{(u, v) | v uncontracted}| − |{(v, w) | v uncontracted}|
          // meanDegree is used instead of outDegree+inDegree as if one adjNode is in both directions
          // only one bucket memory is used. Additionally one shortcut could also stand for two directions.
          int edgeDifference = calcShortcutsResult.shortcutsCount - degree;
  
          // according to the paper do a simple linear combination of the properties to get the priority.
          return params.edgeDifferenceWeight * edgeDifference +
                  params.originalEdgesCountWeight * originalEdgesCount +
                  params.contractedNeighborsWeight * contractedNeighbors;
      }