Olivier Marty 8 rokov pred
rodič
commit
c8b1aa71ab
2 zmenil súbory, kde vykonal 16 pridanie a 17 odobranie
  1. 13 13
      code/BellmanFord.cpp
  2. 3 4
      code/SegmentTree.cpp

+ 13 - 13
code/BellmanFord.cpp

@@ -1,31 +1,31 @@
 // Bellman-Ford algorithm
-// compute shortest path in a directed graphdefaults
-// even with negative coststypede
+// compute shortest path in a directed graph
+// even with negative costs
 // find negative cycles
 // COMPLEXITY: O(nm)
+// USAGE : set dist[*] = INF, dist[src] = 0, nodenum, fill edges
 typedef struct Edge{
   int u, v, w;
   Edge(int u, int v, int w) : u(u), v(v), w(w) {}
 }Edge;
 vector<Edge> edges;
-int  dist[10000];
-int nodenum, edgenum;
+int dist[10000];
+int nodenum;
 const int INF = 1000000000;
-// set dest[*] = INF, dist[src] = 0
-// fill edges, nodenum, edgenum
 void relax(int u, int v, int w) {
   if(dist[v] > dist[u] + w) {
     dist[v] = dist[u] + w;
-	// predecessor[v] = u
+    // predecessor[v] = u
   }
 }
 // return false if there is a negative cycle
 bool BellmanFord() {
-	for(int i = 0; i < nodenum-1; i++)
-		for(int j = 0; j < edgenum; j++) // (if there is no changes we can break)
-			relax(edges[j].u, edges[j].v, edges[j].w);
-	for(int i = 0; i < edgenum; i++)
-		if(dist[edges[i].u] + edges[i].w < dist[edges[i].v])
+  int edgenum = edges.size();
+  for(int i = 0; i < nodenum-1; i++)
+    for(int j = 0; j < edgenum; j++) // (if there is no changes we can break)
+      relax(edges[j].u, edges[j].v, edges[j].w);
+  for(int i = 0; i < edgenum; i++)
+    if(dist[edges[i].u] + edges[i].w < dist[edges[i].v])
       return false;
   return true;
-}
+}

+ 3 - 4
code/SegmentTree.cpp

@@ -54,11 +54,10 @@ void update(int i, int x) {
   int po = N;
   for(int v = 1; v < i;) {
     push(v);
+    v*=2;
     if(i & po)
-	  v = 2*v + 1; // i on right
-    else
-	  v = 2*v; // left
-	po /= 2;
+      v++; // i on right
+    po /= 2;
   }
   tree[i].v = x; // update el
   for(i /= 2; i > 0; i /= 2) // update all segments containing i