/**
 *  Classe Verificador.java
 *  Autor: Pedro Luis Furio Raphael
 *  Data 01/02/10
 */

package main;

import java.util.List;

import digrafos.Arco;
import digrafos.Digrafo;
import digrafos.Par;

public class Verificador {

  /**
   * Recebe um conjunto de arcos C e um conjunto de pares fonte-sorvedouro S e
   * devolve verdadeiro se o peso de C for igual a soma dos fluxos de S.
   */
  // public static boolean verificaIgualdade(List<Arco> C, List<Par> S) {
  public static boolean verificaIgualdade(Digrafo T, int[] C, List<Par> S) {
    int somaDosPesos = 0;
    int somaDosFluxo = 0;
    for (int i = 0; i < C.length; i++) {
      if (C[i] == 0)
        continue;
      Arco a = T.vertices.get(i).paiFilho;
      somaDosPesos += a.peso;
    }
    for (Par pair : S) {
      somaDosFluxo += pair.fluxo;
    }
    if (somaDosFluxo == somaDosPesos)
      return true;
    else
      return false;
  }

  /**
   * Recebe um conjunto de arcos C de uma árvore T e um conjunto de pares
   * fonte-sorvedouro S e devolve verdadeiro se C for um multicorte de S em T.
   */
  public static boolean verificaMultiCorte(Digrafo T, int[] C, List<Par> S) {
    for (Par p : S) {
      boolean temArco = false;
      List<Arco> c = T.achaCaminho(p.s, p.t);
      for (Arco a : c) {
        if (C[a.fim.id] == 1) {
          temArco = true;
          break;
        }
      }
      if (!temArco)
        return false;
    }
    return true;
  }
}