private void initializeAndRemoveLowerBounds(
			HashMap<String, ArrayList<Route>> flightMap) {
		
		HashMap<String, Integer> demandChange = new HashMap<String, Integer>();

		for (String key : flightMap.keySet()) {

			ArrayList<Route> routes = flightMap.get(key);
			Vertex v;
			LinkedList<Edge> list = new LinkedList<Edge>();

			if(key.equals("S")) {
				v = new Vertex(key, -Utils.PLANES_AVAILABLE);
			} else {
				v = new Vertex(key, 0);
			}

			for (Route route : routes) {
				String dest = route.getDest();
				Edge edge = new Edge(dest, route.getCapacity());

				list.add(edge);

				/*
				 * In case of a lower bound changes will have to be applied once
				 * the graph has been created
				 */
				if (route.getLowerBound() == 1) {

					edge.decreaseCapacity();

					/* Track changes of vertexes' demand */
					if (demandChange.containsKey(key)) {
						int offset = demandChange.get(key);
						demandChange.put(key, offset + 1);
					} else {
						demandChange.put(key, 1);
					}

					if (demandChange.containsKey(dest)) {
						int offset = demandChange.get(dest);
						demandChange.put(dest, offset - 1);
					} else {
						demandChange.put(dest, -1);
					}
				}

			}
			graph.put(v, list);
		}

		graph.put(new Vertex("T", Utils.PLANES_AVAILABLE), new LinkedList<Edge>());

		/* Apply demand changes */
		for (Vertex v : graph.keySet()) {
			String s = v.getId();

			if (demandChange.containsKey(s)) {
				int offset = demandChange.get(s);
				v.changeDemand(offset);
			}
		}
	}