public bool IsSatisfiable(int verticesCount, Tuple<int, int>[] clauses) { _verticesCount = verticesCount; var vertices = Enumerable.Range(0, 2 * verticesCount).Select(nodeId => new KosarajuVertex(nodeId)).ToArray(); clauses.ForEach(edge => { AddEdge(vertices, -edge.Item1, edge.Item2); AddEdge(vertices, -edge.Item2, edge.Item1); }); kosarajuSCC.CountStronglyConnectedComponentes(vertices); for (int i = 1; i <= verticesCount; i++) { if (vertices[GetIndexById(i)].Parent.Id.Equals(vertices[GetIndexById(-i)].Parent.Id)) return false; } return true; }