@Override
 void delEdge(Edge<T> e) {
   getFathers.remove(e.getFather(), e.getSon());
   Node<T> father = getFather(e.getSon());
   Node<T> n = tNode.get(e.getSon());
   if (father == null) {
     tree.remove(n);
   } else if (father != n.getFather()) {
     tree.move(father, n);
   }
 }
 @Override
 public GraphMappPolicy<T> create() {
   GraphShortestInc<T> ret = new GraphShortestInc<T>();
   ret.tree = new HashTree();
   ret.tNode = new HashMap();
   tNode.put(null, tree.getRoot());
   return ret;
 }
  @Override
  void addEdge(Edge<T> e) {

    Node<T> fatherN = tNode.get(e.getFather());
    Node<T> son = tNode.get(e.getSon());

    /*
     * Vérifie qu'il n'a pas déjà un père et un autre.
     */

    if (son != null
        && (son.getFather() != null || !son.getFather().getValue().equals(e.getFather()))) {
      if (takeFirst(fatherN, son.getFather())) {
        /*
         * On déplace si le level est plus petit si les level sont egaux
         * on prend T du père en compte
         */
        tree.move(fatherN, son);
      }
    } else {
      Node<T> n = tree.add(fatherN, e);
      tNode.put(n.getValue(), n);
    }
  }