Suponha que (G, u) é uma rede capacitada. Dado um número bv para cada nó v,
queremos encontrar um fluxo que respeite as capacidades dos arcos e tenha excesso exatamente bv em cada v. Em que condições o problema tem solução?
Uma função-demanda em um digrafo G é qualquer função que associa um número bv ∈ Q a cada nó v. Um fluxo x satisfaz uma função-demanda b se x+−(v) = bv para
cada nó v. (Portanto, os nós v que têm bvnegativo são “produtores de fluxo” e os nós v
que têm bv positivo são “consumidores de fluxo”.)
Nosso problema: Dada uma rede (G, b, u) em que u é uma função-capacidade e b uma função-demanda, encontrar um fluxo que satisfaça b e respeite u.
EXEMPLO 1: Seja G o digrafo com nós p i j q descrito abaixo por sua matriz de adjacências. (Faça uma figura.) À direita da matriz, temos uma função-demanda b. Mais à direita, uma função- capacidade u. p i j q b p − 1 1 − +2 i − − − 1 −2 j − 1 − 1 +1 q 1 − − − −1 pi pj iq ji jq qp u 6 4 3 1 2 3 x 0 1 2 0 0 3 Abaixo de u na tabela temos um fluxo viável x na rede (G, b, u).
Para simplificar o palavreado, podemos dizer que um fluxo é viável se satisfaz b e respeita u. É fácil verificar que as seguintes condições são necessárias para a existência de um fluxo viável:
Proposição 4.6 Se existe um fluxo viável então b(V ) = 0 e b(A) ≤ u+
(A) para todo subconjunto A do conjunto V de nós da rede.
Assim, para tornar evidente que não existe fluxo viável basta mostrar que b(V ) 6= 0 ou exibir um conjunto A tal que b(A) > u+(A)
. As condições necessárias descritas na proposição são conhecidas como condições de Gale, em referência a D. Gale, que mostrou (1957) que as condições são também suficientes:
Teorema 4.7 (Gale) Em qualquer rede (G, b, u), se b(V ) = 0 e b(A) ≤ u+(A) para
todo subconjunto A de V := V (G) então existe um fluxo viável. Ademais, se b e u são inteiros, essas mesmas condições garantem a existência de um fluxo viável inteiro. PROVA: Suponha que a rede (G, b, u) satisfaz as condições de Gale; vamos mostrar que existe um fluxo viável. Seja P o conjunto dos nós para os quais b é negativo e Q o conjunto dos nós para os quais b é positivo. Seja (G0, u0, r, s)a rede de fluxo definida
da seguinte maneira. O conjunto de nós de G0 é V ∪ {r, s}, sendo r e s dois novos nós. Para cada p em P , há um arco rp com capacidade u0rp = −bp em G0; para cada q em Q,
há um arco qs com capacidade u0
qs = bqem G0; para cada arco vw de G, há um arco vw
em G0 com capacidade u0vw = uvw.
Seja R um conjunto que separa r de s em G0. Seja B := R r {r}. Considere o corte em G0 cuja margem negativa é R. A capacidade desse corte na rede (G0, u0, r, s)é a soma de três parcelas: as capacidades dos arcos que vão de r a P r B, as capacidades dos arcos que vão de Q ∩ B a s, e as capacidades dos arcos de G que saem de B. Logo,
u0− (R) = −b(P r B) + b(Q ∩ B) + u− (B) = −b(P r B) + b(Q ∩ B) + u+ (V r B) ≥ −b(P r B) + b(Q ∩ B) + b(V r B) = −b(P r B) + b(Q ∩ B) + b(P r B) + b(Q r B) = b(Q ∩ B) + b(Q r B) = b(Q) .
Concluímos assim que todo corte entre r e s na rede (G0, u0, r, s) tem capacidade não inferior a b(Q). Segue daí, pelo teorema MFMC (teorema 3.8), que existe um fluxo viável x0 tal que int(x) ≥ b(Q). Logo, x0qs = u
0
qs para todo q em Q, ou seja, x 0
satura todos os arcos que entram em s. Como b(P ) = b(V ) − b(Q) = −b(Q), o fluxo x0também satura todos os arcos que saem de r. Portanto a restrição x de x0 à rede original é um
fluxo que satisfaz b e respeita u.
A segunda parte da prova segue do teorema MFMC inteiro (teorema3.10).
É útil observar que as condições de Gale são equivalentes às seguintes: b(V ) = 0 e b(A) ≥ −u−
(A) para todo subconjunto A de V .
EXEMPLO 2: Para a rede (G, b, u) do exemplo 1, veja a rede (G0, u0, r, s) construída na prova do teorema4.7: r p i j q s r − − 1 − 1 − p − − 1 1 − 1 i − − − − 1 − j − − 1 − 1 1 q − 1 − − − − s − − − − − − ri rq pi pj iq ji jq qp ps js u0 2 1 6 4 3 1 2 3 2 1 x0 2 1 0 1 2 0 0 3 2 1
A tabela à direita também mostra um fluxo viável x0de r a s na rede (G0, u0, r, s).
EXEMPLO3: Seja (G, b, u) a rede definida abaixo (igual à do exemplo 1 exceto pelo valor de uqp).
p i j q b p − 1 1 − +2 i − − − 1 −2 j − 1 − 1 +1 q 1 − − − −1 pi pj iq ji jq qp u 6 4 3 1 2 2
Essa rede não tem fluxo viável porque o conjunto A := {p, j} não satisfaz a condição b(A) ≤ u+(A).
Exercícios
4.13 ? Condições necessárias. Prove a proposição4.6.
4.14 Encontre um fluxo viável na rede (G, b, u) descrita a seguir. Os nós são r a b c d s e as tabelas definem as funções b e u:
r a b c d s b +3 +2 +2 −1 −3 −3
ra rb ac bd cs ds sr u 8 7 6 5 7 8 6
4.15 ? Árvores. Seja (T, b) uma rede em que T é uma árvore (veja a seção1.1) e b uma função-demanda. Dê condições necessárias e suficientes para que (T, b) tenha um fluxo que satisfaz b. Estabeleça a relação entre essas condições e as condições de Gale. Descreva informalmente um algoritmo que receba T e b e calcule um fluxo em T que satisfaça b ou decida que um tal fluxo não existe. 4.16 Seja r um nó de um digrafo G com n nós. Seja b uma função-demanda tal que br = −n + 1e
bv = +1para cada v 6= r. Seja u a função-capacidade que atribui ∞ a cada arco. Dê condições
necessárias e suficientes para que a rede (G, b, u) tenha um fluxo viável. Se x é um fluxo viável e todas as componentes de x estão em {0, 1}, que aparência tem o conjunto de arcos {e : xe= 1}?
4.17 Formule o problema de Gale como um programa linear inteiro. Maximize a função-objetivo 0x. Escreva o dual da relaxação linear do pl. Repita com função-objetivo 1x. Repita com “minimize” no lugar de “maximize”.
4.18 Versão simétrica das condições de Gale. Mostre que as condições de Gale são equivalentes às seguin- tes: −u−(A) ≤ b(A) ≤ u+(A)para todo A ⊆ V .
4.19 ? Teorema de Gale no caso de capacidades infinitas. Seja b uma função-capacidade em um digrafo G := (V, E). Mostre que a rede (G, b) tem um fluxo que satisfaz b se e somente se b(V ) = 0 e b(A) ≤ 0 para todo A ⊆ V tal que ∂+(A) = ∅.
4.20 Deduza o teorema MFMC (teorema3.8) do teorema de Gale (teorema4.7).
4.21 É dado um grafo bipartido e um custo cepara cada aresta do grafo. Queremos encontrar um em-
parelhamento de custo máximo. Formule o problema como um pl e calcule o seu dual. Descreva o dual como um problema sobre redes.
4.22 É dado um grafo bipartido e um peso bv para cada nó do grafo. Queremos encontrar uma co-
bertura de peso mínimo. Formule o problema como um pl e calcule o seu dual. Descreva o dual como um problema sobre um rede.[CCPS 3.17]
4.23 Subgrafo bipartido com prescrição de graus. É dado um inteiro não-negativo dvpara cada nó v de um
grafo não-dirigido bipartido G. Queremos encontrar E0⊆ E(G) tal que tal que o grau de cada nó vem (V (G), E0)seja dv. Descreva um bom algoritmo para o problema. Dê condições necessárias
e suficientes para que o problema tenha solução. Discuta o caso particular do problema em que dv= kpara cada v.[CCPS 3.18]
4.24 Síntese de digrafo bipartido. Suponha dados números inteiros não-negativos a1, . . , an e b1, . . , bn.
Queremos construir um digrafo bipartido com bipartição ({v1, . . , vn}, {w1, . . , wn}) tal que cada
nó vitem grau de saída aie cada nó witem grau de entrada bi. Mostre como resolver o problema.
[AMO 8.13]
4.25 Digrafo euleriano.2 Dado um digrafo G, encontrar um conjunto de arcos cuja inversão (isto é, troca de vw por wv) resulte em um digrafo G0 = (V (G), E0)tal que |∂0+(v)| = |∂0−(v)|
para cada nó v. Dê condições necessárias e suficientes para que o problema tenha solução.[CCPS 4.5]
4.26 Orientação de grafo não-dirigido. Seja H := (V, E) um grafo e a uma função de V em Z+. Queremos
uma orientação G de H tal que o grau de entrada de todo nó v seja av. Mostre que o problema tem
solução se e somente se iH(X) ≤ a(X) ≤ eH(X)para todo X ⊆ V . Aqui, eH(X)é o número de
arestas de H com pelo menos uma ponta em X e iH(X)o número de arestas de H com ambas as
pontas em X. (A letra “i” sugere “internas” e a letra “e” sugere “externas”.) Mostre também que as condições para existência de solução podem ser formuladas assim: a(V ) = |E| e iH(X) ≤ a(X)
para todo X ⊆ V .[CCPS 3.34]
4.27 Torneio viável. Imagine um torneio de tênis com n participantes. Suponha que cada participante joga exatamente uma partida com cada um dos outros e suponha que não há empates. Seja dio
número de derrotas do tenista i. Como é possível saber se um dado vetor (d1, . . . , dn)representa
um torneio? Dê uma boa caracterização e um bom algoritmo.[CCPS 3.35]