РСОП XXVIII 2016 6

D. Flood 24

Условие


Задача D. Наводнение
---
В един град има n кръстовища, някои от които са свързани с преки двупосочни улици. Между две кръстовища може да има повече от една пряка улица. През пролетта има големи наводнения заради прииждащата река и някои от улиците остават под вода. За всяка улица е известно времето, за което общинската фирма ще успее да я почисти. Необходимо е част от наводнените улиците да се изчистят от придошлата вода, за да може да се достига от всяко кръстовище до всяко друго. Задачата на общинската фирма е за минимално време на осигури възможност за достигане от всяко кръстовище до всяко друго.

Напишете програма flood, която по дадени n кръстовища и m улици, намира минималното време, за което общинската фирма ще се справи със задачата. Програмата трябва да обработва няколко тестови случаи.

Вход
---
От първия ред на стандартния вход се въвежда броят на тестовите случаи. За всеки тестов случай следват няколко реда. Първият от тях съдържа три числа n, m и k, съответно броя на кръстовищата, общия брой на улиците и броя на улиците, които са наводнени. Всеки от следващите m реда съдържа три числа (xi, yi, ti) – номерата на кръстовищата, между които има улица и времето, за което фирмата ще почисти улицата, ако е наводнена. От следващия ред се въвеждат номерата на улиците, които са наводнени. Улиците са номерирани от 1 до m в реда, по който се въвеждат.

Изход
---
За всеки тестов случай на един ред на стандартния изход програмата трябва да изведе минималното време, за което фирмата ще се справи със задачата.

Ограничения
---
1 ≤ n ≤ 1000
1 ≤ m ≤ 10000
1 ≤ k ≤ m
1 ≤ ti ≤ 30000

Примерен вход 
---
1
7 8 4
0 2 5
2 1 2
1 3 8
3 4 12
6 4 1
5 4 10
6 5 4
2 3 6
1 4 6 7

Примерен изход
---
21