Go to diff to previous submission
import java.util.*; import java.io.*; class Fr { while(br.ready()) { doTestCase(br, numNodes, centralNode); } } public static void doTestCase(BufferedReader br, int numNodes, int centralNode) throws IOException { Node[] nodes = new Node[numNodes]; for (int i = 1; i <= nodes.length; i++) { nodes[i- 1] = new Node(i, i == centralNode); } for (int i = 0; i < (numNodes - 1); i++) { // pipes Pipe p = new Pipe(effort, nodeA, nodeB); nodeA.addPipe(p); nodeB.addPipe(p); } /*for (int i = 0; i < nodes.length; i++) { HubNode hubNode = nodes[i]; // System.out.println("node #"+(i+1)+", "+hubNode.getChildren().size()+" children, effort = "+hubNode.getEffort()); }*/ } } class Node { protected int id; boolean root; ArrayList<Pipe> pipes = new ArrayList<Pipe>(); public Node(int id, boolean root) { this.id = id; this.root = root; } public void addPipe(Pipe pipe) { //System.out.printf("Add pipe to node %d, %s\n", id, pipe); pipes.add(pipe); } public ArrayList<Pipe> getPipes() { return pipes; } return id; } //effort to remove ME public int getEffort(Pipe parentPipe) { //System.out.printf("GetEffort of node %d\n", id); int removeMeEffort; //nalezt rodicovskou pipu if(!root) { removeMeEffort = parentPipe.getEffort(); }else { removeMeEffort = -1; } int removeChildrenEffort = 0; 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 for(Pipe p : getPipes()) { //prohlidnu kazou pipu Node a = p.getNodeA(); Node b = p.getNodeB(); if(p.equals(parentPipe)) { //pokud jde o rodicovskou trubku continue; }else { 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); } } } if(root) { //System.out.printf("Root, effort %d\n", removeChildrenEffort); return removeChildrenEffort; }else { int effort = removeMeEffort > removeChildrenEffort ? removeChildrenEffort : removeMeEffort; //System.out.printf("Inner %d, effort %d\n", id, effort); return effort; } } } /*class RootNode extends HubNode { }*/ class Pipe { protected int effort; protected Node a, b; ArrayList<Integer> visitedNodes = new ArrayList<Integer>(); public Pipe(int effort, Node a, Node b) { this.effort = effort; this.a = a; this.b = b; } public int getEffort() { return effort; } public Node getNodeA() { return a; } public Node getNodeB() { return b; } public boolean equals(Pipe p) { if(p == null) { return false; } return this.toString().equals(p.toString()); } @Override return "Pipe "+a.getId()+"<->"+b.getId(); } }
--- 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() {