Advertisement
Guest User

Untitled

a guest
Dec 15th, 2018
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.45 KB | None | 0 0
  1. import javafx.util.Pair;
  2.  
  3. import java.io.*;
  4. import java.util.ArrayList;
  5. import java.util.HashMap;
  6. import java.util.PriorityQueue;
  7.  
  8. public class Cycles {
  9.     private static int n;
  10.     private static int m;
  11.     private static HashMap<Integer, ArrayList<Integer>> S = new HashMap<>();
  12.     private static ArrayList<Pair<Integer, Integer>> w = new ArrayList<>();
  13.     private static HashMap<Integer, Integer> W = new HashMap<>();
  14.     private static ArrayList<Pair<Integer, Integer>> s = new ArrayList<>();
  15.     private static ArrayList<Integer> B = new ArrayList<>();
  16.  
  17.     public static void main(String[] args) throws IOException {
  18.         File file = new File("cycles.in");
  19.         FileReader fileReader = new FileReader(file);
  20.         BufferedReader input = new BufferedReader(fileReader);
  21.         File file2 = new File("cycles.out");
  22.         FileWriter fileWriter = new FileWriter(file2);
  23.         BufferedWriter output = new BufferedWriter(fileWriter);
  24.         String[] nm = input.readLine().split(" ");
  25.         n = Integer.parseInt(nm[0]);
  26.         m = Integer.parseInt(nm[1]);
  27.         String[] weight = input.readLine().split(" ");
  28.         for (int i = 0; i < n; i++) {
  29.             w.add(new Pair<>(i, Integer.parseInt(weight[i])));
  30.             W.put(i, Integer.parseInt(weight[i]));
  31.         }
  32.         for (int i = 0; i < m; i++) {
  33.             String[] s0 = input.readLine().split(" ");
  34.             int l = Integer.parseInt(s0[0]);
  35.             int c = 0;
  36.             ArrayList<Integer> e = new ArrayList<>();
  37.             for (int j = 0; j < l; j++) {
  38.                 int e0 = Integer.parseInt(s0[j + 1]);
  39.                 e.add(e0 - 1);
  40.                 c += (int) Math.pow(2, e0 - 1);
  41.             }
  42.             S.put(c, e);
  43.             s.add(new Pair<>(c, e.size()));
  44.         }
  45.         w.sort((f, s) -> (s.getValue() - f.getValue()));
  46.         boolean ok = true;
  47.         long res = 0L;
  48.         long tmp = 0L;
  49.         int t = 0;
  50.         while(ok) {
  51.             tmp += (long) Math.pow(2, w.get(t).getKey());
  52.             // System.out.println(w.get(t).getKey());
  53.             for (Integer j : S.keySet()) {
  54.                 if (((~tmp) & j) == 0) {
  55.                     ok = false;
  56.                     break;
  57.                 }
  58.             }
  59.             if (ok) {
  60.                 res += W.get(w.get(t).getKey());
  61.             }
  62.             t++;
  63.         }
  64.         output.write(Long.toString(res));
  65.         output.close();
  66.         input.close();
  67.     }
  68. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement