void FlowBasedGlobalConstraint::initStructure() {
    
    if (!hasConfigOrganized) {                
        organizeConfig();
        hasConfigOrganized = true;
    }

	if (graph == NULL) {
		size_t graphSize = GetGraphAllocatedSize();
		graph = new Graph(graphSize, arity_, wcsp->getStore());
		
		if (zeroEdges == NULL) {
			zeroEdges = new bool*[graph->size()];
			for (int i=0;i<graph->size();i++) zeroEdges[i] = new bool[graph->size()];
		}
		for (int i=0;i<graph->size();i++) {
			for (int j=0;j<graph->size();j++) {	
				zeroEdges[i][j] = false;
			}
		}
	
		buildGraph(*graph);
		cost = constructFlow(*graph);
	
	}
	
	propagate();
		
}
		inline Cost constructFlow() {return constructFlow(graph);}