Sei sulla pagina 1di 3

import java.io.

BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.BitSet;
import java.util.Collections;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
import java.util.StringTokenizer;

class Pair implements Comparable<Pair>


{
int v;
int weight;

Pair(int v, int weight)


{
this.v = v;
this.weight = weight;
}

@Override
public int compareTo(Pair arg0) {
// TODO Auto-generated method stub
if(v<arg0.v)
{
return -1;
}

if(v>arg0.v)
{
return 1;
}

else
{
return 0;
}
}
}
class Graph
{
private LinkedList<Pair>[] graph;
private int numberVertices;
private int[] distance;
private BitSet visited;

Graph(int vertices)
{
numberVertices = vertices;
graph = (LinkedList<Pair>[]) new LinkedList[vertices+1];
for (int i = 1; i <=vertices; ++i)
graph[i] = new LinkedList<>();
distance = new int[vertices+1];
visited = new BitSet(vertices+1);
}

public void takeInputGraph(Scanner sc)


{
int numberEdges, v1, v2;
numberEdges = numberVertices-1;
while (0 < numberEdges--)
{
v1 = sc.nextInt();
v2 = sc.nextInt();
int weight=sc.nextInt();
graph[v1].add(new Pair(v2,weight));
graph[v2].add(new Pair(v1,weight));

}
}

public void printAdjacencyList()


{
System.out.println("\nAdjacency list:");
for (int i = 1; i <= numberVertices; ++i)
{
System.out.printf("%d:", i);
for (Pair pr : graph[i])
System.out.printf(" %d", pr.v);
System.out.println();
}
}
public int bfs(int source)
{
visited.clear();
Arrays.fill(distance,-1);
LinkedList<Integer> q = new LinkedList<>();

visited.set(source);
distance[source] = 0;
q.offerLast(source);
int temp=0;
int farthestdistance=Integer.MIN_VALUE;
while (0 < q.size())
{
int u = q.pollFirst();
for (Pair pr : graph[u])
if (distance[pr.v]==-1)
{
visited.set(pr.v);
distance[pr.v] = pr.weight + distance[u];
if(farthestdistance<distance[pr.v])
{
farthestdistance=distance[pr.v];
temp=pr.v;
}
q.offerLast(pr.v);
}
}
return temp;
}
public void printAnswer(int node)
{
int maxdistance=distance[node];
if(maxdistance<100)
{
System.out.println(0+" "+maxdistance);
}
else
if(maxdistance>=100&&maxdistance<1000)
{
System.out.println(100+" "+maxdistance);
}
else
if(maxdistance>=1000&&maxdistance<10000)
{
System.out.println(1000+" "+maxdistance);
}
else
if(maxdistance>=10000)
{
System.out.println(10000+" "+maxdistance);
}
}

}
public class LearningGraph {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
int t=sc.nextInt();
while(t-->0)
{
int n=sc.nextInt();
Graph g=new Graph(n);
g.takeInputGraph(sc);
int farthestnode=g.bfs(1);
int result=g.bfs(farthestnode);
g.printAnswer(result);
}

}
}

Potrebbero piacerti anche