def _see_node(self, node_id, fringe, dist, w_wait_in=0):
        seen, dists = self.seen, self.dist
        wait_in = self.nodes[node_id]['wait_inputs']
        self._update_meeting(node_id, dist)
        if self.check_wait_in(wait_in, node_id):
            pass
        elif node_id in dists:
            if dist < dists[node_id]:
                raise DispatcherError('Contradictory paths found: '
                                      'negative weights?', sol=self)
        elif node_id not in seen or dist < seen[node_id]:
            seen[node_id] = dist
            index = self.nodes[node_id]['index']
            vd = (w_wait_in + int(wait_in), node_id, self.index + index)
            heapq.heappush(fringe, (dist, vd, (node_id, self)))
            return True
        return False