Uva 548

来源:互联网 发布:lol比赛竞猜软件 编辑:程序博客网 时间:2024/05/23 14:01
import java.util.Scanner;public class Main{static int maxv = 10000 + 10;static int[] inOrder = new int[maxv];static int[] postOrder = new int[maxv];static int[] lch = new int[maxv];static int[] rch = new int[maxv];static int best = 0;static int bestSum = 0;static int n = 0;public static void main(String[] args) {Scanner scanner = new Scanner(System.in);String[] strings = new String[2];while (scanner.hasNext()) {strings[0] = scanner.nextLine();strings[1] = scanner.nextLine();readList(strings[0], inOrder);readList(strings[1], postOrder);build(0, n-1, 0, n-1);bestSum = 1000000000;dfs(postOrder[n-1], 0);System.out.println(best);}}public static void readList(String string, int[] tmp) {String[] strings= string.split(" ");n = strings.length;for (int i = 0; i < n; i++) {tmp[i] = Integer.valueOf(strings[i]);}}public static int build(int L1, int R1, int L2, int R2) {if (L1 > R1) {return 0;}int root = postOrder[R2];int p = L1;while (inOrder[p] != root) {p++;}int cnt = p - L1;lch[root] = build(L1, p - 1, L2, L2 + cnt - 1);rch[root] = build(p+1, R1, L2+cnt, R2-1);return root;}public static void dfs(int u, int sum) {sum += u;if (lch[u] == 0 && rch[u] == 0) {if (sum < bestSum || (sum == bestSum  && u < best)) {best = u;bestSum = sum;}}if (lch[u] > 0) {dfs(lch[u], sum);}if (rch[u] > 0) dfs(rch[u], sum);}}

原创粉丝点击