Guest User

Untitled

a guest
Sep 29th, 2014
866
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.26 KB | None | 0 0
  1. #include <cstdio>
  2. #include <queue>
  3. #include <algorithm>
  4. using namespace std;
  5.  
  6. typedef long long ll;
  7. typedef pair <ll, ll> ii;
  8.  
  9. const ll Inf = 9000000000000000000ll;
  10.  
  11. const int Maxn = 12;
  12. const int Maxm = 1000;
  13.  
  14. int t;
  15. int n, m;
  16. int st, en;
  17. int rw[Maxm], rs1[Maxm], rs2[Maxm];
  18. ll work[1 << Maxn];
  19.  
  20. int getSet()
  21. {
  22.     int res = 0;
  23.     int siz; scanf("%d", &siz);
  24.     while (siz--) {
  25.         int a; scanf("%d", &a);
  26.         res |= 1 << a;
  27.     }
  28.     return res;
  29. }
  30.  
  31. int main()
  32. {
  33.     scanf("%d", &t);
  34.     for (int tc = 1; tc <= t; tc++) {
  35.         scanf("%d %d", &n, &m);
  36.         st = getSet();
  37.         en = getSet();
  38.         for (int i = 0; i < m; i++) {
  39.             scanf("%d", &rw[i]); rs1[i] = getSet(); rs2[i] = getSet();
  40.         }
  41.         fill(work, work + (1 << n), Inf);
  42.         work[st] = 0;
  43.         priority_queue <ii> Q; Q.push(ii(0, st));
  44.         while (!Q.empty()) {
  45.             int mask = Q.top().second;
  46.             ll d = -Q.top().first; Q.pop();
  47.             if (d != work[mask]) continue;
  48.             for (int i = 0; i < m; i++)
  49.                 if ((mask & rs1[i]) == rs1[i]) {
  50.                     int cand = (mask ^ rs1[i]) | rs2[i];
  51.                     if (d + rw[i] < work[cand]) {
  52.                         work[cand] = d + rw[i];
  53.                         Q.push(ii(-work[cand], cand));
  54.                     }
  55.                 }
  56.         }
  57.         printf("Case #%d: ", tc);
  58.         if (work[en] == Inf) printf("NO\n");
  59.         else printf("YES %I64d\n", work[en]);
  60.     }
  61.     return 0;
  62. }
Advertisement
Add Comment
Please, Sign In to add comment