enum tache=...;
int nb_taches=...;

int duree[tache]=...;

struct Precedence {
      tache before; 
      tache after; 
};

{Precedence} prec = ...;


var int debut[tache] in 0..maxint;
var int fin in 0..maxint;

minimize
   fin

subject to {
   forall(<p1,p2> in prec)
      debut[p2] >= debut[p1] + duree[p1];
   forall(t in tache)
      fin >= debut[t] + duree[t];   
};
