/* 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
{
static List<List<Integer>> graph;
static boolean[] visited;
static boolean[] isGreen;
static int greenCount;
static int componentSize;
static void dfs(int node) {
visited[node] = true;
componentSize++;
if (isGreen[node]) {
greenCount++;
}
for (int neighbour : graph.get(node)) {
if (!visited[neighbour]) {
dfs(neighbour);
}
}
}
public static int solve(int n, int[][] edges, boolean[] greenNodes) {
int m = edges.length;
isGreen = greenNodes;
int finalAnswer
= Integer.
MAX_VALUE;
// Try deleting each node
for (int x = 1; x <= n; x++) {
// Build new graph excluding node x
graph = new ArrayList<>();
for (int i = 0; i <= n; i++) {
graph.add(new ArrayList<>());
}
for (int i = 0; i < m; i++) {
int u = edges[i][0];
int v = edges[i][1];
if (u == x || v == x) continue;
graph.get(u).add(v);
graph.get(v).add(u);
}
visited = new boolean[n + 1];
int answer = 0;
for (int i = 1; i <= n; i++) {
if (i == x) continue;
if (!visited[i]) {
greenCount = 0;
componentSize = 0;
dfs(i);
if (greenCount >= 1) {
answer += componentSize;
}
}
}
finalAnswer
= Math.
min(finalAnswer, answer
); }
return finalAnswer;
}
public static void main
(String[] args
) {
int n = 5;
int[][] edges = {
{1, 2},
{2, 3},
{3, 4},
{4, 5}
};
boolean[] greenNodes = new boolean[n + 1];
greenNodes[2] = true;
greenNodes[5] = true;
int result = solve(n, edges, greenNodes);
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lCnsKCXN0YXRpYyBMaXN0PExpc3Q8SW50ZWdlcj4+IGdyYXBoOwogICAgc3RhdGljIGJvb2xlYW5bXSB2aXNpdGVkOwogICAgc3RhdGljIGJvb2xlYW5bXSBpc0dyZWVuOwoKICAgIHN0YXRpYyBpbnQgZ3JlZW5Db3VudDsKICAgIHN0YXRpYyBpbnQgY29tcG9uZW50U2l6ZTsKCiAgIAogICAgc3RhdGljIHZvaWQgZGZzKGludCBub2RlKSB7CiAgICAgICAgdmlzaXRlZFtub2RlXSA9IHRydWU7CiAgICAgICAgY29tcG9uZW50U2l6ZSsrOwoKICAgICAgICBpZiAoaXNHcmVlbltub2RlXSkgewogICAgICAgICAgICBncmVlbkNvdW50Kys7CiAgICAgICAgfQoKICAgICAgICBmb3IgKGludCBuZWlnaGJvdXIgOiBncmFwaC5nZXQobm9kZSkpIHsKICAgICAgICAgICAgaWYgKCF2aXNpdGVkW25laWdoYm91cl0pIHsKICAgICAgICAgICAgICAgIGRmcyhuZWlnaGJvdXIpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgaW50IHNvbHZlKGludCBuLCBpbnRbXVtdIGVkZ2VzLCBib29sZWFuW10gZ3JlZW5Ob2RlcykgewoKICAgICAgICBpbnQgbSA9IGVkZ2VzLmxlbmd0aDsKICAgICAgICBpc0dyZWVuID0gZ3JlZW5Ob2RlczsKICAgICAgICBpbnQgZmluYWxBbnN3ZXIgPSBJbnRlZ2VyLk1BWF9WQUxVRTsKCiAgICAgICAgLy8gVHJ5IGRlbGV0aW5nIGVhY2ggbm9kZQogICAgICAgIGZvciAoaW50IHggPSAxOyB4IDw9IG47IHgrKykgewoKICAgICAgICAgICAgLy8gQnVpbGQgbmV3IGdyYXBoIGV4Y2x1ZGluZyBub2RlIHgKICAgICAgICAgICAgZ3JhcGggPSBuZXcgQXJyYXlMaXN0PD4oKTsKICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPD0gbjsgaSsrKSB7CiAgICAgICAgICAgICAgICBncmFwaC5hZGQobmV3IEFycmF5TGlzdDw+KCkpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG07IGkrKykgewogICAgICAgICAgICAgICAgaW50IHUgPSBlZGdlc1tpXVswXTsKICAgICAgICAgICAgICAgIGludCB2ID0gZWRnZXNbaV1bMV07CgogICAgICAgICAgICAgICAgaWYgKHUgPT0geCB8fCB2ID09IHgpIGNvbnRpbnVlOwoKICAgICAgICAgICAgICAgIGdyYXBoLmdldCh1KS5hZGQodik7CiAgICAgICAgICAgICAgICBncmFwaC5nZXQodikuYWRkKHUpOwogICAgICAgICAgICB9CgogICAgICAgICAgICB2aXNpdGVkID0gbmV3IGJvb2xlYW5bbiArIDFdOwogICAgICAgICAgICBpbnQgYW5zd2VyID0gMDsKCiAgICAgICAgICAgCiAgICAgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgewoKICAgICAgICAgICAgICAgIGlmIChpID09IHgpIGNvbnRpbnVlOwoKICAgICAgICAgICAgICAgIGlmICghdmlzaXRlZFtpXSkgewogICAgICAgICAgICAgICAgICAgIGdyZWVuQ291bnQgPSAwOwogICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudFNpemUgPSAwOwoKICAgICAgICAgICAgICAgICAgICBkZnMoaSk7CgogICAgICAgICAgICAgICAgICAgIGlmIChncmVlbkNvdW50ID49IDEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgYW5zd2VyICs9IGNvbXBvbmVudFNpemU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBmaW5hbEFuc3dlciA9IE1hdGgubWluKGZpbmFsQW5zd2VyLCBhbnN3ZXIpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGZpbmFsQW5zd2VyOwogICAgfQoKICAgCiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CgogICAgICAgIGludCBuID0gNTsKCiAgICAgICAgaW50W11bXSBlZGdlcyA9IHsKICAgICAgICAgICAgezEsIDJ9LAogICAgICAgICAgICB7MiwgM30sCiAgICAgICAgICAgIHszLCA0fSwKICAgICAgICAgICAgezQsIDV9CiAgICAgICAgfTsKCiAgICAgICAgCiAgICAgICAgYm9vbGVhbltdIGdyZWVuTm9kZXMgPSBuZXcgYm9vbGVhbltuICsgMV07CiAgICAgICAgZ3JlZW5Ob2Rlc1syXSA9IHRydWU7CiAgICAgICAgZ3JlZW5Ob2Rlc1s1XSA9IHRydWU7CgogICAgICAgIGludCByZXN1bHQgPSBzb2x2ZShuLCBlZGdlcywgZ3JlZW5Ob2Rlcyk7CiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHJlc3VsdCk7CiAgICB9Cn0=