Go to diff to previous submission
import java.util.ArrayList; import java.util.HashSet; import java.util.LinkedList; import java.util.List; import java.util.Scanner; import java.util.Set; public class Fn { static class Kozel { public ArrayList<Integer> sousedi = new ArrayList<Integer>(); } static Set<Integer> kudylezekozolezec = new HashSet<Integer>(); static Set<Integer> semnelez = new HashSet<Integer>(); while (scanner.hasNext()) { int nodes = scanner.nextInt(); int edges = scanner.nextInt(); Kozel[] kozelnik = new Kozel[nodes + 1]; for (int i=1; i<=nodes; i++) { kozelnik[i] = new Kozel(); } for (int i=0; i<edges; i++) { int node1 = scanner.nextInt(); int node2 = scanner.nextInt(); kozelnik[node1].sousedi.add(node2); kozelnik[node2].sousedi.add(node1); } boolean hasBunny = false; for (int i=1; i<=nodes; i++) { if (kozelnik[i].sousedi.size() >= 4) { hasBunny = true; break; } else if (kozelnik[i].sousedi.size() == 3) { hasBunny = prolez(kozelnik, i); if (hasBunny) break; } } if (hasBunny) { } else { } } } public static boolean prolez(Kozel[] kozinec, int index) { kudylezekozolezec.clear(); kudylezekozolezec.add(index); semnelez.clear(); if (!i.equals(j)) { semnelez.add(j); kudylezekozolezec.add(j); } } if (kozolezec(kozinec, i)) return true; } return false; } public static boolean kozolezec(Kozel[] kozinec, int index) { while (true) { kudylezekozolezec.add(index); int scnt = kozinec[index].sousedi.size(); if (scnt > 3) { return true; } else { int cnt = 0; for (int i = 0; i < kozinec[index].sousedi.size(); i++) { if (!semnelez.contains(kozinec[index].sousedi.get(i))) { cnt++; } } if (cnt == 3) { return true; } else if (cnt == 2) { boolean nasli = false; for (int k = 0; k < kozinec[index].sousedi.size(); k++) { if (!kudylezekozolezec.contains(kozinec[index].sousedi.get(k))) { index = kozinec[index].sousedi.get(k); nasli = true; break; } } if (!nasli) return false; } else { return false; } } } } }
--- c5.s699.cteam038.fn.java.0.Fn.java +++ c5.s977.cteam038.fn.java.0.Fn.java @@ -15,4 +15,5 @@ static Set<Integer> kudylezekozolezec = new HashSet<Integer>(); + static Set<Integer> semnelez = new HashSet<Integer>(); public static void main(String [] args) { @@ -55,8 +56,18 @@ public static boolean prolez(Kozel[] kozinec, int index) { + for (Integer i : kozinec[index].sousedi) { - + kudylezekozolezec.clear(); kudylezekozolezec.add(index); + + semnelez.clear(); + for (Integer j : kozinec[index].sousedi) { + if (!i.equals(j)) { + semnelez.add(j); + kudylezekozolezec.add(j); + } + } + if (kozolezec(kozinec, i)) return true; } @@ -68,22 +79,48 @@ - while (kozinec[index].sousedi.size() == 2) { + while (true) { kudylezekozolezec.add(index); + int scnt = kozinec[index].sousedi.size(); - if (!kudylezekozolezec.contains(kozinec[index].sousedi.get(0))) { - index = kozinec[index].sousedi.get(0); - } else if (!kudylezekozolezec.contains(kozinec[index].sousedi.get(1))) { - index = kozinec[index].sousedi.get(1); + if (scnt > 3) { + return true; + } else { - return false; + + int cnt = 0; + + for (int i = 0; i < kozinec[index].sousedi.size(); i++) { + if (!semnelez.contains(kozinec[index].sousedi.get(i))) { + cnt++; + } + } + + if (cnt == 3) { + + return true; + + } else if (cnt == 2) { + + boolean nasli = false; + + for (int k = 0; k < kozinec[index].sousedi.size(); k++) { + if (!kudylezekozolezec.contains(kozinec[index].sousedi.get(k))) { + index = kozinec[index].sousedi.get(k); + nasli = true; + break; + } + } + + if (!nasli) return false; + + + } else { + + return false; + } } + } - - if (kozinec[index].sousedi.size() > 2) { - return true; // to pochopime... - } else { - return false; - } }