Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

求测试数据,或者帮忙看下这个java代码, re中,本地随机数据测试,对比ac的cpp代码没有问题

Posted by xmexl at 2012-05-03 22:38:11 on Problem 3764
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
import java.io.IOException;

public class Main {
	public static void main(String[] args) throws NumberFormatException, IOException {
		new POJ3764().run();
	}

}
class POJ3764 {
	static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
	int run() throws NumberFormatException, IOException {
		while(true) {
			String line = br.readLine();
			if(line == null) break;
			int nVert = Integer.parseInt(line);
			Graph g = new Graph(nVert);
			for(int i = 0; i < nVert - 1; i ++) {
				StringTokenizer st = new StringTokenizer(br.readLine());
				int u = Integer.parseInt(st.nextToken());
				int v = Integer.parseInt(st.nextToken());
				int w = Integer.parseInt(st.nextToken());
				//String[] tokens = br.readLine().split(" ", -1);
				//int u = Integer.parseInt(tokens[0]);
				//int v = Integer.parseInt(tokens[1]);
				//int w = Integer.parseInt(tokens[2]);
				g.addEdge(u, v, w);
				g.addEdge(v, u, w);
			}
			int[] xorDist = new int[nVert];
			boolean[] visited = new boolean[nVert];
			getDist(g, visited, xorDist, 0, 0);
		
			//for(int i = 0; i < nVert; i ++)
				//System.out.println(i + " " + xorDist[i]);
			BinaryTree bt = new BinaryTree(31*nVert+100);
			int result = 0;
			for(int i = 0; i < nVert; i ++) {
				bt.insert(xorDist[i]);
				result = Math.max(result, bt.getMax(xorDist[i]));
			}
			System.out.println(result);
		}
		return 0;
	}
	void getDist(Graph g, boolean[] visited, int[] xorDist, int now, int xorValue) {
		if(visited[now]) return ;
		visited[now] = true;
		xorDist[now] = xorValue;
		for(int e = g.head[now]; e != -1; e = g.next[e]) {
			getDist(g, visited, xorDist, g.to[e], g.weight[e]^xorValue);
		}
	}
}
class BinaryTree {
	int np;
	int[][] child;
	BinaryTree(int size) {
		child = new int[2][size];
		Arrays.fill(child[0], -1);
		Arrays.fill(child[1], -1);
		np = 1;
	}
	int getMax(int mask) {
		int result = 0, now = 0;
		for(int level = 30; level != -1; level --) {
			int next = (mask&(1<<level)) == 0 ? 1 : 0;
			if(child[next][now] == -1) {
				now = child[1-next][now];
			} else {
				result += (1<<level);
				now = child[next][now];
			}
		}
		return result;
	}
	void insert(int mask) {
		int now = 0;
		for(int level = 30; level != -1; level --) {
			int idx = (mask&(1<<level)) == 0 ? 0 : 1;
			if(child[idx][now] == -1) {
				child[idx][now] = np ++;
			}
			now = child[idx][now];
		}
	}
}
class Graph {
	int ep;
	int[] head, to, weight, next;
	int nVert;
	Graph(int nV) {
		nVert = nV;
		ep = 0;
		head = new int[nVert];
		Arrays.fill(head, -1);
		to = new int[nVert*2];
		weight = new int[nVert*2];
		next = new int[nVert*2];
	}
	public void addEdge(int u, int v, int w) {
		weight[ep] = w;
		next[ep] = head[u];
		to[ep] = v;
		head[u] = ep;
		ep ++;
	}
}

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator