Go to diff to previous submission
import java.util.Scanner; public class Fr { int n; int main; int a; int b; int v; while(sc.hasNextInt()){ a = 0; b = 0; n = sc.nextInt(); main = sc.nextInt(); int[][] mat = new int[n+1][n+1]; for (int i = 0; i < n-1; i++) { a = sc.nextInt(); b = sc.nextInt(); v = sc.nextInt(); mat[a][b] = v; mat[b][a] = v; } int sumV = 0; for (int i = 1; i < n+1; i++) { if (i != main && mat[main][i] != 0){ sumV += getValueS(mat, i, main); } } } sc.close(); } static int getValueS(int[][] mat, int s, int r){ int sumV = 0; for (int i = 1; i < mat.length; i++) { if (i != r && mat[i][s] != 0){ sumV += getValueS(mat, i ,s); } } if (sumV != 0 && sumV < mat[r][s]){ return sumV; } return mat[r][s]; } }
--- c5.s876.cteam055.fr.java.0.Fr.java +++ c5.s954.cteam055.fr.java.0.Fr.java @@ -1,10 +1,4 @@ -import java.util.ArrayList; -import java.util.Arrays; -import java.util.LinkedList; -import java.util.Queue; import java.util.Scanner; -import javax.management.Query; - public class Fr { @@ -15,11 +9,9 @@ int n; int main; - ArrayList<Node> nodes; int a; int b; int v; - Node tempNode; - Node father; + while(sc.hasNextInt()){ a = 0; @@ -28,16 +20,8 @@ n = sc.nextInt(); main = sc.nextInt(); - - nodes = null; - nodes = new ArrayList<Node>(n+1); + int[][] mat = new int[n+1][n+1]; - for (int i = 0; i < n+1; i++) { - - nodes.add(new Node(i)); - - } - for (int i = 0; i < n-1; i++) { a = sc.nextInt(); @@ -49,66 +33,12 @@ } - Queue<Integer> q = new LinkedList<Integer>(); - q.add(main); - - - int[] used = new int[n+1]; - int nodeID; - used[main] = 1; -// printMatrix(mat); - nodes.get(main).setValue(Integer.MAX_VALUE); - while(!q.isEmpty()){ - nodeID = q.poll(); - for (int i = 1; i < n+1; i++) { - if (used[i] == 0 && i != nodeID && mat[nodeID][i] != 0){ - used[i] = 1; - q.add(i); - - tempNode = nodes.get(i); - tempNode.value = mat[nodeID][i]; - nodes.get(nodeID).addChild(tempNode); -// System.out.println(nodeID+" "+i); - } + int sumV = 0; + for (int i = 1; i < n+1; i++) { + if (i != main && mat[main][i] != 0){ + sumV += getValueS(mat, i, main); } } -// System.out.println(); - - System.out.println(getNodeValue(nodes.get(main))); - - - - - - - -// for (int i = 0; i < n+1; i++) { -// nodes.add(new Node(i)); -// } -//// System.out.println(nodes.size()); -// -// nodes.get(main).setValue(Integer.MAX_VALUE); -//// nodes.add(main, new Node(main, Integer.MAX_VALUE)); -// -// for (int i = 0; i < n-1; i++) { -// a = sc.nextInt(); -// b = sc.nextInt(); -// v = sc.nextInt(); -// -// father = nodes.get(a); -// if (father == null){ -// tempNode = new Node(a, v); -// nodes.set(a, tempNode); -// -// father = nodes.get(b); -// father.addChild(tempNode); -// }else{ -// tempNode = new Node(b, v); -// nodes.set(b, tempNode); -// -// father.addChild(tempNode); -// } -// } -// -// System.out.println(getNodeValue(nodes.get(main))); + System.out.println(sumV); + } sc.close(); @@ -116,48 +46,16 @@ - static void printMatrix(int[][]array){ - for (int i = 0; i < array.length; i++) { - System.out.println(Arrays.toString(array[i])); - } - } - - static int getNodeValue(Node node){ - if (node.child.size() == 0){ - return node.value; - } - + static int getValueS(int[][] mat, int s, int r){ int sumV = 0; - for (Node n : node.child) { - sumV += getNodeValue(n); + for (int i = 1; i < mat.length; i++) { + if (i != r && mat[i][s] != 0){ + sumV += getValueS(mat, i ,s); + } } - if (node.value > sumV){ - node.value = sumV; - return node.value; + if (sumV != 0 && sumV < mat[r][s]){ + return sumV; } - return node.value; - } -} - -class Node{ - int id; - int value; - LinkedList<Node> child; - Node ancestor; - - public Node(int id) { - super(); - this.id = id; - - child = new LinkedList<Node>(); -// this.ancestor = ancestor; - } - - void addChild(Node node){ - this.child.add(node); - } - - void setValue(int value){ - this.value = value; + return mat[r][s]; }