
Untitled
By: a guest on
May 23rd, 2012 | syntax:
None | size: 1.31 KB | hits: 17 | expires: Never
import java.util.*;
import java.io.*;
class Vertex {
int value;
int depth;
boolean visited;
List<Vertex> list;
public Vertex(int value) {
this.value = value;
visited = false;
list = new ArrayList<Vertex>();
depth = 0;
}
}
public class Main {
Vertex dV = null;
public void dfs(Vertex u, int depth) {
if(dV == null)
dV = u;
u.visited = true;
u.depth = depth;
dV = dV.depth > depth ? dV : u;
for(Vertex v : u.list) {
if(!v.visited) {
dfs(v,u.depth + 1);
}
}
}
public static void main(String[] args) throws IOException {
//Scanner sc = new Scanner(System.in);
Map<Integer,Vertex> vertexList = new HashMap<Integer,Vertex>();
Main m = new Main();
StreamTokenizer strTok = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
strTok.nextToken();
int n = (int)strTok.nval;
for(int i=1;i<=n;i++) {
vertexList.put(i,new Vertex(i));
}
for(int i=0;i<n-1;i++) {
strTok.nextToken();
Vertex u = vertexList.get((int)strTok.nval);
strTok.nextToken();
Vertex v = vertexList.get((int)strTok.nval);
u.list.add(v);
v.list.add(u);
}
Vertex u = vertexList.get(1);
m.dfs(u,0);
for(Vertex v : vertexList.values()) {
v.depth = 0;
v.visited = false;
}
Vertex start = m.dV;
m.dfs(m.dV,0);
Vertex end = m.dV;
System.out.println(Math.abs(start.depth - end.depth));
}
}