Source code for submission s937

Go to diff to previous submission

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. Node[] nodes = new Node[numNodes];
  22. for (int i = 1; i <= nodes.length; i++) {
  23. nodes[i- 1] = new Node(i, i == centralNode);
  24.  
  25. }
  26.  
  27.  
  28.  
  29.  
  30. for (int i = 0; i < (numNodes - 1); i++) { // pipes
  31. String line = br.readLine();
  32. Node nodeA = nodes[Integer.parseInt(st.nextToken()) - 1];
  33. Node nodeB = nodes[Integer.parseInt(st.nextToken()) - 1];
  34. int effort = Integer.parseInt(st.nextToken());
  35.  
  36. Pipe p = new Pipe(effort, nodeA, nodeB);
  37. nodeA.addPipe(p);
  38. nodeB.addPipe(p);
  39.  
  40. }
  41.  
  42. System.out.println(nodes[centralNode - 1].getEffort(null));
  43.  
  44. /*for (int i = 0; i < nodes.length; i++) {
  45.   HubNode hubNode = nodes[i];
  46.   // System.out.println("node #"+(i+1)+", "+hubNode.getChildren().size()+" children, effort = "+hubNode.getEffort());
  47.  
  48.   }*/
  49.  
  50.  
  51. }
  52.  
  53.  
  54.  
  55.  
  56. }
  57.  
  58.  
  59. class Node {
  60.  
  61. protected int id;
  62. boolean root;
  63. ArrayList<Pipe> pipes = new ArrayList<Pipe>();
  64.  
  65.  
  66. public Node(int id, boolean root) {
  67. this.id = id;
  68. this.root = root;
  69. }
  70.  
  71. public void addPipe(Pipe pipe) {
  72. //System.out.printf("Add pipe to node %d, %s\n", id, pipe);
  73. pipes.add(pipe);
  74. }
  75.  
  76. public ArrayList<Pipe> getPipes() {
  77. return pipes;
  78. }
  79.  
  80. public Integer getId() {
  81. return id;
  82. }
  83.  
  84. //effort to remove ME
  85. public int getEffort(Pipe parentPipe) {
  86.  
  87. //System.out.printf("GetEffort of node %d\n", id);
  88.  
  89. int removeMeEffort;
  90. //nalezt rodicovskou pipu
  91.  
  92. if(!root) {
  93. removeMeEffort = parentPipe.getEffort();
  94. }else {
  95.  
  96. removeMeEffort = -1;
  97. }
  98.  
  99. int removeChildrenEffort = 0;
  100.  
  101.  
  102.  
  103. if(pipes.size() == 1 && !root) { //list
  104.  
  105. //vzit patricnej node
  106. /*Pipe p = pipes.get(0);
  107.   Node child = p.getNodeA().getId() == id ? p.getNodeB() : p.getNodeA();
  108.   System.out.printf("LEAF #%d, effort %d", id, removeM);
  109.   return child.getEffort(visitedNodes);
  110.   * */
  111. //System.out.printf("Leaf %d, effort %d\n", id, removeMeEffort);
  112. return removeMeEffort;
  113.  
  114. }else { //hubovej uzel
  115.  
  116. for(Pipe p : getPipes()) { //prohlidnu kazou pipu
  117. Node a = p.getNodeA();
  118. Node b = p.getNodeB();
  119.  
  120. if(p.equals(parentPipe)) {
  121. //pokud jde o rodicovskou trubku
  122. continue;
  123.  
  124. }else {
  125. Node child = a.getId() == id ? b : a;
  126. //System.out.printf("Inner %d asks for effort %d, has effort %d\n", id, child.getId(), removeMeEffort);
  127. removeChildrenEffort += child.getEffort(p);
  128. }
  129. }
  130.  
  131. }
  132.  
  133. if(root) {
  134. //System.out.printf("Root, effort %d\n", removeChildrenEffort);
  135. return removeChildrenEffort;
  136. }else {
  137. int effort = removeMeEffort > removeChildrenEffort ? removeChildrenEffort : removeMeEffort;
  138. //System.out.printf("Inner %d, effort %d\n", id, effort);
  139. return effort;
  140. }
  141. }
  142.  
  143. }
  144.  
  145. /*class RootNode extends HubNode {
  146. }*/
  147.  
  148. class Pipe {
  149. protected int effort;
  150. protected Node a, b;
  151.  
  152. ArrayList<Integer> visitedNodes = new ArrayList<Integer>();
  153.  
  154. public Pipe(int effort, Node a, Node b) {
  155. this.effort = effort;
  156. this.a = a;
  157. this.b = b;
  158. }
  159.  
  160. public int getEffort() {
  161. return effort;
  162. }
  163.  
  164. public Node getNodeA() {
  165. return a;
  166. }
  167.  
  168. public Node getNodeB() {
  169. return b;
  170. }
  171.  
  172. public boolean equals(Pipe p) {
  173. if(p == null) {
  174. return false;
  175. }
  176. return this.toString().equals(p.toString());
  177. }
  178.  
  179. @Override
  180. public String toString() {
  181. return "Pipe "+a.getId()+"<->"+b.getId();
  182. }
  183. }

Diff to submission s892

Fr.java

--- c5.s892.cteam006.fr.java.0.Fr.java
+++ c5.s937.cteam006.fr.java.0.Fr.java
@@ -43,5 +43,5 @@
         }
         
-        System.out.println(nodes[centralNode - 1].getEffort(new ArrayList<Integer>()));
+        System.out.println(nodes[centralNode - 1].getEffort(null));
         
         /*for (int i = 0; i < nodes.length; i++) {
@@ -86,6 +86,5 @@
     
     //effort to remove ME
-    public int getEffort(ArrayList<Integer> visitedNodes) {       
-        visitedNodes.add(id);
+    public int getEffort(Pipe parentPipe) {       
         
         //System.out.printf("GetEffort of node %d\n", id);
@@ -94,28 +93,25 @@
         //nalezt rodicovskou pipu
         
-        if(!root) {
-            Pipe parentPipe = null;
-        
-            for(Pipe p : getPipes()) {
-                //System.out.println(p);
-                if(visitedNodes.contains(p.getNodeA().getId()) || 
-                        visitedNodes.contains(p.getNodeB().getId())) {
-                    parentPipe = p;
-                    break;
-                }
-            }
-            
+        if(!root) {            
             removeMeEffort = parentPipe.getEffort();
         }else {
             
-            removeMeEffort = -1;
-            
+            removeMeEffort = -1; 
         }
+        
         int removeChildrenEffort = 0;
         
         
         
-        if(pipes.size() == 1) { //list
-            return pipes.get(0).getEffort();
+        if(pipes.size() == 1 && !root) { //list
+            
+            //vzit patricnej node
+            /*Pipe p = pipes.get(0);
+            Node child = p.getNodeA().getId() == id ? p.getNodeB() : p.getNodeA();
+            System.out.printf("LEAF #%d, effort %d", id, removeM);
+            return child.getEffort(visitedNodes);
+             * */
+            //System.out.printf("Leaf %d, effort %d\n", id, removeMeEffort);
+            return removeMeEffort;
             
         }else { //hubovej uzel
@@ -125,12 +121,12 @@
                 Node b = p.getNodeB();
                 
-                if(visitedNodes.contains(a.getId()) &&
-                        visitedNodes.contains(b.getId())) {
-                    //pokud mne spojuje s nodem kde jsem uz byl, ignoruju
+                if(p.equals(parentPipe)) {
+                    //pokud jde o rodicovskou trubku
                     continue;
                     
                 }else {
-                    Node child = a.getId() == id ? b : a;       
-                    removeChildrenEffort += child.getEffort(visitedNodes);                  
+                    Node child = a.getId() == id ? b : a;      
+                    //System.out.printf("Inner %d asks for effort %d, has effort %d\n", id, child.getId(), removeMeEffort);
+                    removeChildrenEffort += child.getEffort(p);                  
                 }         
             }
@@ -139,7 +135,10 @@
         
         if(root) {
+            //System.out.printf("Root, effort %d\n", removeChildrenEffort);
             return removeChildrenEffort;
         }else {
-            return removeMeEffort > removeChildrenEffort ? removeChildrenEffort : removeMeEffort;
+            int effort = removeMeEffort > removeChildrenEffort ? removeChildrenEffort : removeMeEffort;
+            //System.out.printf("Inner %d, effort %d\n", id, effort);
+            return effort;
         }
     }
@@ -174,4 +173,11 @@
     }
     
+    public boolean equals(Pipe p) {
+        if(p == null) {
+            return false;
+        }
+        return this.toString().equals(p.toString());
+    }
+    
     @Override
     public String toString() {