Uma matriz é uma tabela de números. Matrizes são muito utilizadas para representar entidades que possuem essa característica, e muitas vezes também usadas na modelagem de diversos problemas.
Por vezes, problemas são modelados por matrizes gigantescas, que em muitos casos nem cabem na memória de um computador. Entretanto, na maioria das vezes essas matrizes possuem muitos elementos nulos. Matrizes com essa característica recebem o nome de matrizes esparsas.
Na prática, armazenar elementos nulos é um desperdício de memória. Por isso, há várias formas de se representar matrizes esparsas. Todas essas formas armazenam apenas os elementos não nulos da matriz.
Uma das formas é chamada CSR (do inglês, Compressed Sparse Row). Uma das maneiras de se representar uma matriz no formato CSR é utilizando listas encadeadas da seguinte forma: um vetor de nós-cabeça corresponde a cada linha da matriz, e cada linha é uma lista encadeada contendo apenas os elementos não nulos da respectiva linha.
Cada nó da lista encadeada possui o seguinte formato:
Por exemplo, a matriz seria representada como
Em aplicações práticas, um dos interesses básicos é efetuar um produto matriz-vetor. Dada uma matriz de dimensão e um vetor de dimensão , o produto matriz-vetor de por resulta num vetor de dimensão tal que para . Esse produto, assim implementado, custa . Esse custo, para matrizes muito grandes, pode ser inviável na prática.
Sua tarefa é ler uma matriz esparsa de números inteiros com dimensão e um vetor de números inteiros com dimensão e imprimir na tela o resultado do produto da matriz pelo vetor. O produto deve ser calculado de forma eficiente.
A entrada é composta por várias linhas. A primeira linha contém os valores de e , respectivamente. As linhas seguintes contêm os elementos não nulos da matriz, representados por três inteiros: a linha (um inteiro de a ), a coluna (um inteiro de a ) e o valor do elemento não nulo (um inteiro qualquer), respectivamente. A entrada da matriz termina com a linha -1 -1 -1
. As últimas linhas contém as entradas do vetor.
A saída é composta por linhas, cada uma contendo o respectivo elemento do vetor resultante.
3 3
0 0 7
1 1 4
0 2 8
2 1 2
-1 -1 -1
9
1
4
95
4
2