Source code for submission s838

RoseHeads.java

  1. /*
  2.  * To change this template, choose Tools | Templates
  3.  * and open the template in the editor.
  4.  */
  5. package senseofsecuritz;
  6.  
  7. import java.util.HashMap;
  8. import java.util.HashSet;
  9. import java.util.Scanner;
  10. import java.util.Set;
  11.  
  12. /**
  13.  *
  14.  * @author istenik3
  15.  */
  16. public class RoseHeads {
  17. static int[][] cenyHran;
  18. static HashMap<Integer, Set<Integer>> edges;
  19.  
  20. static public void main(String [] arguments) throws Exception {
  21. Scanner scanner = new Scanner(System.in);
  22.  
  23. cenyHran = new int[1001][1001];
  24. edges = new HashMap<Integer, Set<Integer>>();
  25.  
  26. while(scanner.hasNextInt()) {
  27. int nodes = scanner.nextInt();
  28. int startNode = scanner.nextInt();
  29.  
  30. for(int i=1; i<=nodes; i++) {
  31. edges.put(i, new HashSet<Integer>());
  32. }
  33.  
  34. // nacitame
  35. for(int i=0; i<nodes-1; i++) {
  36. int a = scanner.nextInt();
  37. int b = scanner.nextInt();
  38. int cena = scanner.nextInt();
  39. cenyHran[b][a] = cena;
  40. cenyHran[a][b] = cena;
  41. edges.get(b).add(a);
  42. edges.get(a).add(b);
  43. }
  44.  
  45. int sucet = 0;
  46. //System.out.println(edges.get(startNode).size());
  47. for(int vrchol : edges.get(startNode)) {
  48.  
  49. sucet += minCenaZaVypnutie(startNode, vrchol);
  50. }
  51.  
  52. System.out.println(sucet);
  53. }
  54. }
  55.  
  56. static public int minCenaZaVypnutie(int vrcholA, int vrcholB) {
  57. int najmensiaCena = cenyHran[vrcholA][vrcholB];
  58.  
  59. int sucet = 0;
  60.  
  61. if(edges.get(vrcholB).size() == 1) {
  62. return najmensiaCena;
  63. }
  64.  
  65. for(int vrcholC : edges.get(vrcholB)) {
  66. if(vrcholC == vrcholA) {
  67. continue;
  68. }
  69. sucet += minCenaZaVypnutie(vrcholB, vrcholC);
  70. }
  71.  
  72. return Math.min(najmensiaCena, sucet);
  73. }
  74. }
  75.