Я так понял, что ребра задают разницу между "высотами" вершин. "получается, что в сумме не равно 0" означает, что конфликтов нет и можно назначить вершинам какие-то высоты, чтобы все ребра были правильными. Я правильно понял условие?
Тогда задача решается простым обходом в глубину или в ширину, как вам угодно. Просто зафиксируйте одну вершину на высоте 0, и проходя по всем ребрам фиксируйте высоты всех остальных вершин. Если ребро ведет уже к зафиксированной вершине, то можно проверить, что высота остается такой же, но в эту вершину, в любом случае, обход больше не заходит.
В конце, если вам надо, чтобы все вершины имели неотрицаиельную высоту, например, надо найти вершину с минимальной высотой, и если она отрицательна, вычесть ее из высот всех вершин.
Обход надо вызывать в цикле, чтобы обошелся весь граф, даже если он несвязный.