import java.util.*;
public class Main {
class Vertex {
int index;
boolean hidden;
List<Vertex> childs = new ArrayList<>();
public Vertex(int index) {
this.index = index;
}
}
public static void main
(String[] args
) { new Main().run();
}
void run() {
int n = 10;
ArrayList<Vertex> tree = new ArrayList<>();
HashMap
<Integer, List
<Integer
>> childListMap
= new HashMap
<>(); childListMap.
put(0,
Arrays.
asList(1,
2,
3)); childListMap.
put(2,
Arrays.
asList(4)); childListMap.
put(3,
Arrays.
asList(7)); childListMap.
put(4,
Arrays.
asList(5,
6)); childListMap.
put(7,
Arrays.
asList(8,
9));
HashSet<Integer> hiddenSet = new HashSet<>();
hiddenSet.
addAll(Arrays.
asList(5,
6));
Vertex[] vs = new Vertex[n];
for (int i = 0; i < n; i++) {
Vertex v = new Vertex(i);
v.hidden = hiddenSet.contains(i);
vs[i] = v;
}
for (int i = 0; i < n; i++) {
if (childListMap.get(i) == null)
continue;
for (Integer childIndex
: childListMap.
get(i
)) { vs[i].childs.add(vs[childIndex]);
}
}
setHiddenForTree(vs[0]);
printResult(vs);
}
void setHiddenForTree(Vertex root) {
dfs(root);
}
boolean dfs(Vertex v) {
if (v.hidden) {
return true;
}
if (v.childs.isEmpty()){
return v.hidden;
}
boolean allChildsHidden = true;
for (Vertex child : v.childs) {
allChildsHidden = allChildsHidden & dfs(child); //if at least one child isn't hidden, result of boolean product will be 'false'
}
if (allChildsHidden) {
v.hidden = true;
}
return v.hidden;
}
void printResult(Vertex[] vs) {
for (int i = 0; i < vs.length; i++) {
System.
out.
println("vertex " + i
+ ": " + "hidden = " + vs
[i
].
hidden); }
}
}
aW1wb3J0IGphdmEudXRpbC4qOwoKCnB1YmxpYyBjbGFzcyBNYWluIHsKICAgICBjbGFzcyBWZXJ0ZXggewogICAgICAgIGludCBpbmRleDsKICAgICAgICBib29sZWFuIGhpZGRlbjsKICAgICAgICBMaXN0PFZlcnRleD4gY2hpbGRzID0gbmV3IEFycmF5TGlzdDw+KCk7CgogICAgICAgIHB1YmxpYyBWZXJ0ZXgoaW50IGluZGV4KSB7CiAgICAgICAgICAgIHRoaXMuaW5kZXggPSBpbmRleDsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgIG5ldyBNYWluKCkucnVuKCk7CiAgICB9CiAgICAKICAgIHZvaWQgcnVuKCkgewogICAgICAgIGludCBuID0gMTA7CiAgICAgICAgQXJyYXlMaXN0PFZlcnRleD4gdHJlZSA9IG5ldyBBcnJheUxpc3Q8PigpOwogICAgICAgIEhhc2hNYXA8SW50ZWdlciwgTGlzdDxJbnRlZ2VyPj4gY2hpbGRMaXN0TWFwID0gbmV3IEhhc2hNYXA8PigpOwogICAgICAgIGNoaWxkTGlzdE1hcC5wdXQoMCwgQXJyYXlzLmFzTGlzdCgxLCAyLCAzKSk7CiAgICAgICAgY2hpbGRMaXN0TWFwLnB1dCgyLCBBcnJheXMuYXNMaXN0KDQpKTsKICAgICAgICBjaGlsZExpc3RNYXAucHV0KDMsIEFycmF5cy5hc0xpc3QoNykpOwogICAgICAgIGNoaWxkTGlzdE1hcC5wdXQoNCwgQXJyYXlzLmFzTGlzdCg1LCA2KSk7CiAgICAgICAgY2hpbGRMaXN0TWFwLnB1dCg3LCBBcnJheXMuYXNMaXN0KDgsIDkpKTsKCiAgICAgICAgSGFzaFNldDxJbnRlZ2VyPiBoaWRkZW5TZXQgPSBuZXcgSGFzaFNldDw+KCk7CiAgICAgICAgaGlkZGVuU2V0LmFkZEFsbChBcnJheXMuYXNMaXN0KDUsIDYpKTsKCiAgICAgICAgVmVydGV4W10gdnMgPSBuZXcgVmVydGV4W25dOwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB7CiAgICAgICAgICAgIFZlcnRleCB2ID0gbmV3IFZlcnRleChpKTsKICAgICAgICAgICAgdi5oaWRkZW4gPSBoaWRkZW5TZXQuY29udGFpbnMoaSk7CiAgICAgICAgICAgIHZzW2ldID0gdjsKICAgICAgICB9CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspIHsKICAgICAgICAgICAgaWYgKGNoaWxkTGlzdE1hcC5nZXQoaSkgPT0gbnVsbCkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICBmb3IgKEludGVnZXIgY2hpbGRJbmRleCA6IGNoaWxkTGlzdE1hcC5nZXQoaSkpIHsKICAgICAgICAgICAgICAgIHZzW2ldLmNoaWxkcy5hZGQodnNbY2hpbGRJbmRleF0pOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHNldEhpZGRlbkZvclRyZWUodnNbMF0pOwogICAgICAgIHByaW50UmVzdWx0KHZzKTsKICAgIH0KCiAgICB2b2lkIHNldEhpZGRlbkZvclRyZWUoVmVydGV4IHJvb3QpIHsKICAgICAgICBkZnMocm9vdCk7CiAgICB9CgogICAgYm9vbGVhbiBkZnMoVmVydGV4IHYpIHsKICAgICAgICBpZiAodi5oaWRkZW4pIHsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIGlmICh2LmNoaWxkcy5pc0VtcHR5KCkpewogICAgICAgICAgICByZXR1cm4gdi5oaWRkZW47CiAgICAgICAgfQogICAgICAgIGJvb2xlYW4gYWxsQ2hpbGRzSGlkZGVuID0gdHJ1ZTsKICAgICAgICBmb3IgKFZlcnRleCBjaGlsZCA6IHYuY2hpbGRzKSB7CiAgICAgICAgICAgIGFsbENoaWxkc0hpZGRlbiA9IGFsbENoaWxkc0hpZGRlbiAmIGRmcyhjaGlsZCk7IC8vaWYgYXQgbGVhc3Qgb25lIGNoaWxkIGlzbid0IGhpZGRlbiwgcmVzdWx0IG9mIGJvb2xlYW4gcHJvZHVjdCB3aWxsIGJlICdmYWxzZScKICAgICAgICB9CiAgICAgICAgaWYgKGFsbENoaWxkc0hpZGRlbikgewogICAgICAgICAgICB2LmhpZGRlbiA9IHRydWU7CiAgICAgICAgfQogICAgICAgIHJldHVybiB2LmhpZGRlbjsKICAgIH0KICAgIAogICAgdm9pZCBwcmludFJlc3VsdChWZXJ0ZXhbXSB2cykgewogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ2ZXJ0ZXggIiArIGkgKyAiOiAiICsgImhpZGRlbiA9ICIgKyB2c1tpXS5oaWRkZW4pOwogICAgICAgIH0KICAgIH0KfQo=