Tarefa 17 - Definindo capitais

Prazo de entrega recomendado:

Você definirá a capital de um estado. Para isso, será preciso estudar a organização viária das cidades, representadas por um grafo.


A primeira capital do Brasil foi Salvador, atualmente capital do estado da Bahia. Na época da colonização, essa cidade foi escolhida devido ao seu perfil geográfico e portuário, que facilitava o transporte de mercadoria e pessoas. A escolha de outras capitais para cada estado, já no período republicano, não foi diferente. Cada capital tem uma característica especial que a fez ser escolhida como referência em âmbito estadual.

Para ajudar a escolher a capital, podemos associar um número, chamado de fator de centralidade, a cada cidade de um estado. Esse número é calculado a partir das diversas linhas de acesso que compõem o sistema de transporte do estado, levando-se em consideração dois aspectos:

Para calcular o fator de centralidade de uma cidade $u$, denotado por $C_{u}$, é preciso conhecer as distancias de $u$ a cada cidade alcançável do estado, $v$, denotada por $dist(u,v)$. A distância a cada cidade $v$ é ponderada por sua população, $p_v$. O fator de centralidade é definido como a média ponderada das distâncias. Mais precisamente, se $A_u$ é o conjunto de cidades alcançáveis a partir de $u$, então o fator de centralidade é:

$$ C_{u}=\frac{\sum_{v \in A_u}{p_v \cdot dist(u,v)}}{\sum_{v \in A_u}p_v} $$

Por exemplo, na figura abaixo, as caixas contêm as populações das cidades e cada linha representa um percurso de comprimento mínimo.

O fator de centralidade de Teresina é

$$ C_{Teresina} = \frac{2000 \cdot 0 + 500 \cdot 100 + 1000 \cdot 50}{2000 + 500 + 1000} = 28{,}57 $$

A capital ideal é a cidade que dá acesso a pelo menos metade da população do estado com menor fator de centralidade. Sua tarefa é implementar um programa def_capitais.c que calcula esse fator para cada cidade e as ordena.

Entrada

A entrada contém, na primeira linha, o número de cidades do estado. A partir da segunda, contém cada cidade e sua respectiva população. Depois disso, cada linha representa uma ligação direta entre duas cidades, contendo os nomes e a distância (valores reais) entre elas. O nome de cada cidade tem menos que 50 caracteres e não tem espaços.

Exemplo de entrada

4
Teresina 2000
Parnaiba 500
Floriano 1000
Oeiras 1500
Teresina Parnaiba 100.0
Teresina Floriano 50.0
Parnaiba Floriano 200.0

Saída

A saída deverá exibir um relatório com as cidades que alcançam pelo menos metade da população e os fatores de centralidade associados. As cidades devem ser ordenadas pelo fator de centralidade e, se houver empate, pelo nome.

Exemplo de saída

Teresina 28.57
Floriano 50.00
Parnaiba 100.00

Critérios

É obrigatório utilizar um grafo para representação do estado e as ligações entre as cidades.

Correção

Esta tarefa será corrigida automaticamente sempre que você realizar um git push. Depois de terminada a tarefa, deve-se utilizar o botão na interface de notas para solicitar a correção de um monitor.

Turma AB: O peso desta tarefa é 5.