def constructGraph(self, v,w, D_T_T, D_F_F):
		G = Graph()
		V = {}
		V['s'] = 0
		
		i = 1
		for v_i in v.getChildren():
			V["v" + str(v_i.getHashNum())] = i
			i += 1
			
		V['e_i'] = i
		i += 1
			
		for w_i in w.getChildren():
			V["w" + str(w_i.getHashNum())] = i
			i += 1
		
		V['e_j'] = i
		i += 1
		V['t'] = i
		
		G.V = range(len(V))
		
		G.capacity = numpy.zeros([len(V),len(V)])
		
		for v_i in v.getChildren():
			G.capacity[V['s'],V["v" + str(v_i.getHashNum())]] = 1	
			for w_i in w.getChildren():
				G.capacity[V["v" + str(v_i.getHashNum())],V["w" + str(w_i.getHashNum())]] = 1
			G.capacity[V["v" + str(v_i.getHashNum())],V['e_j']] = 1
				
		for w_i in w.getChildren():
			G.capacity[V["w" + str(w_i.getHashNum())], V['t']] = 1
			G.capacity[V['e_i'],V["w" + str(w_i.getHashNum())]] = 1
			
		G.capacity[V['s'],V['e_i']] = n_j = len(w.getChildren())
		G.capacity[V['e_j'],V['t']] = n_i = len(v.getChildren())
		G.capacity[V['e_i'],V['e_j']] = max(n_i, n_j) - min(n_i, n_j)
		
		G.cost = numpy.zeros([len(V),len(V)])
		for v_i in v.getChildren():
			for w_i in w.getChildren():
				G.cost[V["v" + str(v_i.getHashNum())], V["w" + str(w_i.getHashNum())]] = self.getConstrainedTED(v_i, w_i, D_T_T, D_F_F)
				G.cost[V['e_i'], V["w" + str(w_i.getHashNum())]] = self.getConstrainedTED(Tree.getEmptyTree(), w_i, D_T_T, D_F_F)
			G.cost[V["v" + str(v_i.getHashNum())], V['e_j']] = self.getConstrainedTED(v_i, Tree.getEmptyTree(), D_T_T, D_F_F)
		
		G.init_edges()
		G.init_cost_rev()
		return (G,V)