Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.Scanner;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.LinkedList;
- class Cidade{
- HashMap<Integer, Integer> rodovias = new HashMap<Integer, Integer>();
- public void addRodovia(int destino, int comprimento) {
- this.rodovias.put(destino, comprimento);
- }
- }
- public class Main {
- public static void main(String[] args) {
- Scanner sc = new Scanner(System.in);
- HashMap<Integer, Cidade> listaCidades = new HashMap<Integer, Cidade>();
- int numCidades, numRodovias;
- int indiceOrigem, indiceDestino, comprimentoRodovia;
- while(sc.hasNext()) {
- numCidades = sc.nextInt();
- numRodovias = sc.nextInt();
- for(int i = 0; i < numCidades; i++) {
- Cidade cidade = new Cidade();
- listaCidades.put(i+1, cidade);
- }
- for(int i = 0; i < numRodovias; i++) {
- indiceOrigem = sc.nextInt();
- indiceDestino = sc.nextInt();
- comprimentoRodovia = sc.nextInt();
- listaCidades.get(indiceOrigem).addRodovia(indiceDestino, comprimentoRodovia);
- listaCidades.get(indiceDestino).addRodovia(indiceOrigem, comprimentoRodovia);
- }
- System.out.printf("%d", somaComprimentos(listaCidades));
- }
- sc.close();
- }
- public static int somaComprimentos(HashMap<Integer, Cidade> listaCidades) {
- HashMap<Integer, Integer> distancia = new HashMap<Integer, Integer>();
- ArrayList<Integer> visitado = new ArrayList<Integer>();
- int resp = 0;
- int atual = 1;
- distancia.put(atual, 0);
- visitado.add(atual);
- for(int i = 0; i < listaCidades.size() - 1; i++) {
- distancia = atualizaDistancias(listaCidades, distancia, visitado, atual);
- distancia.remove(atual);
- atual = buscaMenorDistancia(distancia);
- resp = resp + distancia.get(atual);
- distancia.put(atual, 0);
- visitado.add(atual);
- }
- return resp;
- }
- public static HashMap<Integer, Integer> atualizaDistancias (HashMap<Integer, Cidade> listaCidades, HashMap<Integer, Integer> distancia, ArrayList<Integer> visitado, int atual) {
- for(Integer cidadeVizinha : listaCidades.get(atual).rodovias.keySet()) {
- int valor = listaCidades.get(atual).rodovias.get(cidadeVizinha);
- if(visitado.contains(cidadeVizinha)) continue;
- if(!distancia.containsKey(cidadeVizinha)) {
- distancia.put(cidadeVizinha, valor);
- continue;
- }
- else {
- if(distancia.get(cidadeVizinha) > valor){
- distancia.put(cidadeVizinha, valor);
- }
- }
- }
- return distancia;
- }
- public static int buscaMenorDistancia (HashMap<Integer, Integer> distancia) {
- int distanciaMenor = Integer.MAX_VALUE;
- int indiceMenor = -1;
- for(int indice : distancia.keySet()) {
- if(distancia.get(indice) < distanciaMenor) {
- distanciaMenor = distancia.get(indice);
- indiceMenor = indice;
- }
- }
- return indiceMenor;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment