Source code for submission s717

Fr.java

  1. import java.util.*;
  2. import java.io.*;
  3.  
  4. class Fr
  5. {
  6.  
  7. public static void main(String[] args) throws IOException {
  8.  
  9.  
  10. while(br.ready())
  11. {
  12. String line = br.readLine();
  13. int numNodes = Integer.parseInt(st.nextToken());
  14. int centralNode = Integer.parseInt(st.nextToken());
  15. doTestCase(br, numNodes, centralNode);
  16.  
  17. }
  18. }
  19.  
  20. public static void doTestCase(BufferedReader br, int numNodes, int centralNode) throws IOException {
  21. HubNode[] nodes = new HubNode[numNodes];
  22. for (int i = 0; i < nodes.length; i++) {
  23. nodes[i] = new HubNode();
  24.  
  25. }
  26.  
  27. nodes[centralNode - 1].setCentral();
  28.  
  29.  
  30.  
  31. for (int i = 0; i < (numNodes - 1); i++) {
  32. String line = br.readLine();
  33. int nodeA = Integer.parseInt(st.nextToken());
  34. int nodeB = Integer.parseInt(st.nextToken());
  35. int effort = Integer.parseInt(st.nextToken());
  36.  
  37. if(nodeA == centralNode || nodeB == centralNode) { //jeden z nich je central
  38. if(nodeA == centralNode) {
  39. nodes[nodeA - 1].addChild(nodes[nodeB - 1]);
  40. nodes[nodeB - 1].setEffort(effort);
  41.  
  42. }else {
  43. nodes[nodeB - 1].addChild(nodes[nodeA - 1]);
  44. nodes[nodeA - 1].setEffort(effort);
  45. }
  46. }else { //ani jeden
  47. if(!nodes[nodeA - 1].hasSetEffort()) { //na tenhle jsem jeste nenastavil effort
  48. nodes[nodeA - 1].setEffort(effort);
  49. nodes[nodeB - 1].addChild(nodes[nodeA - 1]);
  50. }else {
  51. nodes[nodeB - 1].setEffort(effort);
  52. nodes[nodeA - 1].addChild(nodes[nodeB - 1]);
  53. }
  54.  
  55. }
  56.  
  57. }
  58.  
  59. System.out.println(nodes[centralNode - 1].getEffort());
  60.  
  61. for (int i = 0; i < nodes.length; i++) {
  62. HubNode hubNode = nodes[i];
  63. // System.out.println("node #"+(i+1)+", "+hubNode.getChildren().size()+" children, effort = "+hubNode.getEffort());
  64.  
  65. }
  66.  
  67.  
  68. }
  69.  
  70.  
  71.  
  72.  
  73. }
  74.  
  75.  
  76. class HubNode {
  77.  
  78. protected int effort = 0;
  79. protected boolean setEffort = false;
  80. protected boolean central = false;
  81. protected ArrayList<HubNode> children = new ArrayList<HubNode>();
  82.  
  83. public int getEffort() {
  84.  
  85. if(children.size() == 0) {// System.out.println("getChildren == 0");
  86. //koncovej uzel
  87. return effort;
  88. }
  89.  
  90. int childEffort = 0;
  91. for(HubNode n : getChildren()) {
  92. childEffort += n.getEffort();
  93. }
  94.  
  95. return (effort > childEffort || central) ? childEffort : effort;
  96.  
  97.  
  98. }
  99.  
  100. void setCentral() {
  101. central = true;
  102. }
  103.  
  104. public boolean hasSetEffort() {
  105. return setEffort;
  106. }
  107.  
  108. public void setEffort(int effort) {
  109. setEffort = true;
  110. this.effort = effort;
  111. }
  112.  
  113. public ArrayList<HubNode> getChildren() {
  114. return children;
  115. }
  116.  
  117. public void addChild(HubNode child) {
  118. // System.out.println("Adding child ");
  119. children.add(child);
  120. }
  121. }