import java.io.*; import java.util.*; public class MGPathfinder { static int vertices,vstart,vend,histlen; static ArrayList[] adjlist; // array of arraylist of edges static String datafile = "dv2.in"; public static void main(String args[]) throws IOException { BufferedReader f = new BufferedReader(new FileReader(datafile)); StringTokenizer st = new StringTokenizer(f.readLine()); vertices = Integer.parseInt(st.nextToken()); int edges = Integer.parseInt(st.nextToken()); vstart = Integer.parseInt(st.nextToken()); vend = Integer.parseInt(st.nextToken()); histlen = Integer.parseInt(st.nextToken()); adjlist = new ArrayList[vertices]; for(int n=0; n=inf) continue; double x = 0;//globhist.predictMutations(E.getWeight(),t) + prevvals[E.getVertex(v)]; if(x0; t--) { System.out.println(t + " " + btrack); btrack = bestprev[btrack][t].getVertex(btrack); } return bestprev[btrack][0]; } } class Edge { int ev1; int ev2; boolean eon; boolean evolved; History ehist; public Edge(int v1, int v2, boolean on) { ev1=v1; ev2=v2; eon=on; evolved=false; ehist = new History(); } public void setOn(boolean on) { evolved=!evolved; //The evolution loop will hit each edge twice, so we have to negate one of the evolutions. if(evolved) eon=on; } public boolean getOn() { return eon; } public int getVertex(int a) { if(a==ev1) return ev2; if(a==ev2) return ev1; return Math.min(ev1,ev2); } public History getHistory() { return ehist; } } class History { int ontooff, offtoon, ontoon, offtooff; public History() { ontooff=0; offtoon=0; ontoon=0; offtooff=0; } public void addEntry(boolean b1, boolean b2) { if(b1&&b2) ontoon++; if(b1&&!b2) ontooff++; if(!b1&&b2) offtoon++; if(!b1&&!b2) offtooff++; } public double getChangeProb(boolean cur) { if(cur) return (double)ontooff/(ontoon+ontooff); return (double) offtoon/(offtooff+offtoon); } }