/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
public static float calcScore
(int keyID, Map
<Integer, Integer
> frequencies, Map
<Integer, Integer
> subTax
) { float res = 0f;
int nodes = 0;
if (frequencies.containsKey(keyID)) {
System.
out.
println(keyID
+ "->" + frequencies.
get(keyID
)); return frequencies.get(keyID) + 0f;
}
for (Map.
Entry<Integer, Integer
> entry
: subTax.
entrySet()) { if (entry.getValue() == keyID) {
nodes++;
res += calcScore(entry.getKey(), frequencies, subTax);
}
}
return 1 / nodes * res;
}
public static void main
(String[] args
) {
Map
<Integer, Integer
> subTaxonomy
= new HashMap
<>(); subTaxonomy.put(1, 0);
subTaxonomy.put(2, 1);
subTaxonomy.put(3, 1);
subTaxonomy.put(4, 2);
subTaxonomy.put(17, 3);
subTaxonomy.put(11, 4);
subTaxonomy.put(13, 4);
Map
<Integer, Integer
> frequencies
= new HashMap
<>(); frequencies.put(11, 3);
frequencies.put(13, 5);
frequencies.put(17, 9);
System.
out.
println(calcScore
(1, frequencies, subTaxonomy
));
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lCnsKCXB1YmxpYyBzdGF0aWMgZmxvYXQgY2FsY1Njb3JlKGludCBrZXlJRCwgTWFwPEludGVnZXIsIEludGVnZXI+IGZyZXF1ZW5jaWVzLCBNYXA8SW50ZWdlciwgSW50ZWdlcj4gc3ViVGF4KSB7CgkJZmxvYXQgcmVzID0gMGY7CgkJaW50IG5vZGVzID0gMDsKCQlpZiAoZnJlcXVlbmNpZXMuY29udGFpbnNLZXkoa2V5SUQpKSB7CgkJCVN5c3RlbS5vdXQucHJpbnRsbihrZXlJRCArICItPiIgKyBmcmVxdWVuY2llcy5nZXQoa2V5SUQpKTsKCQkJcmV0dXJuIGZyZXF1ZW5jaWVzLmdldChrZXlJRCkgKyAwZjsKCQl9CgoJCWZvciAoTWFwLkVudHJ5PEludGVnZXIsIEludGVnZXI+IGVudHJ5IDogc3ViVGF4LmVudHJ5U2V0KCkpIHsKCQkJaWYgKGVudHJ5LmdldFZhbHVlKCkgPT0ga2V5SUQpIHsKCQkJCW5vZGVzKys7CgkJCQlyZXMgKz0gY2FsY1Njb3JlKGVudHJ5LmdldEtleSgpLCBmcmVxdWVuY2llcywgc3ViVGF4KTsKCQkJfQoJCX0KCQlyZXR1cm4gMSAvIG5vZGVzICogcmVzOwoJfQoJCglwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CgoJCU1hcDxJbnRlZ2VyLCBJbnRlZ2VyPiBzdWJUYXhvbm9teSA9IG5ldyBIYXNoTWFwPD4oKTsKCQlzdWJUYXhvbm9teS5wdXQoMSwgMCk7CgkJc3ViVGF4b25vbXkucHV0KDIsIDEpOwoJCXN1YlRheG9ub215LnB1dCgzLCAxKTsKCQlzdWJUYXhvbm9teS5wdXQoNCwgMik7CgkJc3ViVGF4b25vbXkucHV0KDE3LCAzKTsKCQlzdWJUYXhvbm9teS5wdXQoMTEsIDQpOwoJCXN1YlRheG9ub215LnB1dCgxMywgNCk7CgoJCU1hcDxJbnRlZ2VyLCBJbnRlZ2VyPiBmcmVxdWVuY2llcyA9IG5ldyBIYXNoTWFwPD4oKTsKCQlmcmVxdWVuY2llcy5wdXQoMTEsIDMpOwoJCWZyZXF1ZW5jaWVzLnB1dCgxMywgNSk7CgkJZnJlcXVlbmNpZXMucHV0KDE3LCA5KTsKCQkKCQlTeXN0ZW0ub3V0LnByaW50bG4oY2FsY1Njb3JlKDEsIGZyZXF1ZW5jaWVzLCBzdWJUYXhvbm9teSkpOwoKCX0KfQ==