Instradamento della Mucca (Bronzo)#11185

Instradamento della Mucca (Bronzo) (Editoriale)

Ogni percorso definisce una sequenza direzionata di città. Poiché Bessie vuole utilizzare un solo percorso, per ciascun percorso è sufficiente verificare:

la città compare prima della città ?

Se questa condizione è soddisfatta, Bessie può usare questo percorso e pagare il suo costo fisso. Tra tutti i percorsi adatti, bisogna trovare il percorso con il costo minimo.

Esempio

Nell'esempio ci sono percorsi:

Poiché A = 1 e B = 2, Bessie può usare solo il terzo percorso: la città compare in esso prima della città . Il costo di questo percorso è pari a .

Implementazione dell'algoritmo

Dichiariamo una costante .

#define INF 1000000000

Leggiamo i dati in ingresso.

scanf("%d %d %d", &a, &b, &n);

Inizializziamo la variabile , in cui conserveremo la risposta.

res = INF;

Scorriamo gli percorsi.

for (i = 0; i < n; i++)
{

Leggiamo il costo del percorso e il numero di città su questo percorso.

  scanf("%d %d", &cost, &sz);

La variabile contiene , se la città non è ancora comparsa sul percorso corrente.

  flag = false;

Leggiamo in sequenza le città sul percorso corrente.

  for (j = 0; j < sz; j++)
  {
    scanf("%d", &city);

Se compare la città , impostiamo flag = true.

    if (city == a) flag = true;

Se compare la città , e prima di essa sul percorso è già comparsa la città А~(flag = true), allora Bessie può usare questo percorso, pagando il suo costo .

Se ci sono più percorsi adatti, scegliamo il percorso con il costo minimo.

    if (flag && city == b) res = min(res, cost);
  }
}

Dopo aver elaborato tutti i percorsi, stampiamo la risposta.

if (res == INF)
  printf("-1\n");
else
  printf("%d\n", res);