import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.util.ArrayList; import java.util.StringTokenizer; public class mis { public static void main(String[] args) throws IOException { BufferedReader bi = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer tokenizer = new StringTokenizer(bi.readLine()); int liczbaMiast = Integer.parseInt(tokenizer.nextToken()); int liczbaDrog = Integer.parseInt(tokenizer.nextToken()); int d = Integer.parseInt(tokenizer.nextToken()); Zbior zbior = new Zbior(liczbaMiast); for (int i = 0; i< liczbaDrog; i++){ tokenizer = new StringTokenizer(bi.readLine()); int miastoA = Integer.parseInt(tokenizer.nextToken()); int miastoB = Integer.parseInt(tokenizer.nextToken()); zbior.addScizke(miastoA-1, miastoB-1); } zbior.zmniejszanie(d); StringBuilder wynik = new StringBuilder(); int ile = 0; for (int i = 0; i<zbior.sciezka.size(); i++) if (zbior.sciezka.get(i).size() > 0){ ile++; if (i == zbior.sciezka.size()-1) wynik.append(i+1); else wynik.append((i+1)+" "); } PrintWriter drukuj = new PrintWriter(new BufferedOutputStream(System.out)); if (ile != 0){ drukuj.println(ile); drukuj.println(wynik.toString()); } else drukuj.println("NIE"); drukuj.flush(); } } class Zbior{ ArrayList<ArrayList<Integer>> sciezka; Zbior(int liczbaMiast){ sciezka = new ArrayList<>(); for (int i = 0; i<liczbaMiast; i++){ sciezka.add(new ArrayList<Integer>()); } } void addScizke(int a, int b){ sciezka.get(a).add(b); sciezka.get(b).add(a); } void zmniejszanie(int minimalnaIloscDrog){ int i = 0; while(i<sciezka.size()){ if (sciezka.get(i).size() < minimalnaIloscDrog && 0 < sciezka.get(i).size()){ int gdzieSieCofnac = this.removeNodeAndMinimalRemovedIndex(i); if (gdzieSieCofnac < i) i=gdzieSieCofnac-1; } i++; } } int removeNodeAndMinimalRemovedIndex(int a){ int minimalIndex = Integer.MAX_VALUE; for (int i = sciezka.get(a).size()-1; i>=0; i--){ int gdzieUsunacA = sciezka.get(a).get(i); for (int j = 0; j<sciezka.get(gdzieUsunacA).size(); j++) if (sciezka.get(gdzieUsunacA).get(j) == a){ sciezka.get(gdzieUsunacA).remove(j); break; } sciezka.get(a).remove(i); minimalIndex = Math.min(minimalIndex, gdzieUsunacA); } return minimalIndex; } void removeNode(int a){ for (int i = sciezka.get(a).size()-1; i>=0; i--){ int gdzieUsunacA = sciezka.get(a).get(i); for (int j = 0; j<sciezka.get(gdzieUsunacA).size(); j++) if (sciezka.get(gdzieUsunacA).get(j) == a){ sciezka.get(gdzieUsunacA).remove(j); break; } sciezka.get(a).remove(i); } } void print(){ for (int i = 0; i<sciezka.size(); i++){ System.out.print(i+ " | "); for (int j = 0; j<sciezka.get(i).size(); j++) System.out.print(sciezka.get(i).get(j)+ " "); System.out.println(); } } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 | import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.util.ArrayList; import java.util.StringTokenizer; public class mis { public static void main(String[] args) throws IOException { BufferedReader bi = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer tokenizer = new StringTokenizer(bi.readLine()); int liczbaMiast = Integer.parseInt(tokenizer.nextToken()); int liczbaDrog = Integer.parseInt(tokenizer.nextToken()); int d = Integer.parseInt(tokenizer.nextToken()); Zbior zbior = new Zbior(liczbaMiast); for (int i = 0; i< liczbaDrog; i++){ tokenizer = new StringTokenizer(bi.readLine()); int miastoA = Integer.parseInt(tokenizer.nextToken()); int miastoB = Integer.parseInt(tokenizer.nextToken()); zbior.addScizke(miastoA-1, miastoB-1); } zbior.zmniejszanie(d); StringBuilder wynik = new StringBuilder(); int ile = 0; for (int i = 0; i<zbior.sciezka.size(); i++) if (zbior.sciezka.get(i).size() > 0){ ile++; if (i == zbior.sciezka.size()-1) wynik.append(i+1); else wynik.append((i+1)+" "); } PrintWriter drukuj = new PrintWriter(new BufferedOutputStream(System.out)); if (ile != 0){ drukuj.println(ile); drukuj.println(wynik.toString()); } else drukuj.println("NIE"); drukuj.flush(); } } class Zbior{ ArrayList<ArrayList<Integer>> sciezka; Zbior(int liczbaMiast){ sciezka = new ArrayList<>(); for (int i = 0; i<liczbaMiast; i++){ sciezka.add(new ArrayList<Integer>()); } } void addScizke(int a, int b){ sciezka.get(a).add(b); sciezka.get(b).add(a); } void zmniejszanie(int minimalnaIloscDrog){ int i = 0; while(i<sciezka.size()){ if (sciezka.get(i).size() < minimalnaIloscDrog && 0 < sciezka.get(i).size()){ int gdzieSieCofnac = this.removeNodeAndMinimalRemovedIndex(i); if (gdzieSieCofnac < i) i=gdzieSieCofnac-1; } i++; } } int removeNodeAndMinimalRemovedIndex(int a){ int minimalIndex = Integer.MAX_VALUE; for (int i = sciezka.get(a).size()-1; i>=0; i--){ int gdzieUsunacA = sciezka.get(a).get(i); for (int j = 0; j<sciezka.get(gdzieUsunacA).size(); j++) if (sciezka.get(gdzieUsunacA).get(j) == a){ sciezka.get(gdzieUsunacA).remove(j); break; } sciezka.get(a).remove(i); minimalIndex = Math.min(minimalIndex, gdzieUsunacA); } return minimalIndex; } void removeNode(int a){ for (int i = sciezka.get(a).size()-1; i>=0; i--){ int gdzieUsunacA = sciezka.get(a).get(i); for (int j = 0; j<sciezka.get(gdzieUsunacA).size(); j++) if (sciezka.get(gdzieUsunacA).get(j) == a){ sciezka.get(gdzieUsunacA).remove(j); break; } sciezka.get(a).remove(i); } } void print(){ for (int i = 0; i<sciezka.size(); i++){ System.out.print(i+ " | "); for (int j = 0; j<sciezka.get(i).size(); j++) System.out.print(sciezka.get(i).get(j)+ " "); System.out.println(); } } } |