My issue
I spent 6 days of my life tring to understand why this particular code I wrote is only partially correct! Is there anyone who can help me solve this? I give up on identifying what corner case my code is failing to catch.
Please mail to javavenk@gmail.com, I will call/contact you on phone or whatsapp to listen to whatever suggestion/advice you could give.
My code
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
class Codechef {
public static void main(String[] args) throws Throwable {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.valueOf(br.readLine()), t = 0;
String nextLine[];
Integer N, s, d, w, mw, h;
Map<Integer, Integer> edges, weights;
Set<Integer> leaves, midPoints;
for (t = 0; t < T; t++) {
nextLine = br.readLine().split("\\s+");
N = Integer.valueOf(nextLine[0]);
leaves = new HashSet<>();
edges = new HashMap<>();
for (int i = 0; i < N-1; i++) {
nextLine = br.readLine().split("\\s+");
s = Integer.valueOf(nextLine[0]);
d = Integer.valueOf(nextLine[1]);
leaves.add(d);
if (leaves.contains(s)) {
leaves.remove(s);
}
edges.put(d, s);
}
weights = new HashMap<>();
midPoints = new HashSet<>();
for (Integer l : leaves) {
d = edges.get(l);
s=l;
h=1;
while (d != null) {
weights.put(d, weights.getOrDefault(d, 0) + 1);
d = edges.get(d);
if(h%2==0) {
s = edges.get(s);
}
h++;
}
midPoints.add(s);
midPoints.remove(l);
}
mw = 0;
for (Integer m : midPoints) {
w = weights.get(m);
if (w > mw) {
mw = w;
}
}
System.out.println(mw);
}
}
}
Problem Link: Chef and Tag Practice Coding Problem - CodeChef