Advertisement
Guest User

Untitled

a guest
Apr 30th, 2011
274
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.16 KB | None | 0 0
  1. // Philip_PV
  2.  
  3. #include <fstream>
  4. #include <iostream>
  5. #include <set>
  6. #include <map>
  7. #include <string>
  8. #include <vector>
  9. #include <list>
  10. #include <queue>
  11. #include <deque>
  12. #include <stack>
  13. #include <bitset>
  14. #include <functional>
  15. #include <numeric>
  16. #include <utility>
  17. #include <sstream>
  18. #include <iomanip>
  19. #include <cstdio>
  20. #include <cstdlib>
  21. #include <algorithm>
  22. #include <cassert>
  23. #include <ctime>
  24. #include <memory.h>
  25. //#include <cmath>
  26.  
  27. using namespace std;
  28.  
  29. typedef long long ll;
  30. typedef pair<double, double> pdd;
  31. typedef pair<int, int> pii;
  32.  
  33. /*
  34. #define x first
  35. #define y second
  36. //*/
  37.  
  38. inline int nextint() {
  39.   int res = 0;
  40.   char c = 0; while (c < '0' || c > '9') c = getchar();
  41.   while (c >= '0' && c <= '9') {
  42.     res = res * 10 + c - '0';
  43.     c = getchar();
  44.   }
  45.   return res;
  46. }
  47.  
  48. #ifdef _DEBUG
  49.   #define dbg(x) { cerr << #x << " = " << x << endl; }
  50. #else
  51.   #define dbg(x) ;
  52. #endif
  53.  
  54. #define forn(_i,_n) for (int _i = 0; _i < (int)(_n); ++_i)
  55. #define mp make_pair
  56.  
  57. int n;
  58. map<int, ll> M;
  59.  
  60. bool g[50][50];
  61.  
  62. vector<pair<int, int> > masks;
  63.  
  64. int now;
  65. void push(int mask, int pos, int left) {
  66.   if (!left) {
  67.     masks.push_back(mp(now, mask));
  68.     return;
  69.   }
  70.  
  71.   while (true) {
  72.     if (pos + left > n) return;
  73.  
  74.     int m = mask | (1 << pos);
  75.     push(m, pos + 1, left - 1);
  76.  
  77.  
  78.     ++pos;
  79.   }
  80. }
  81.  
  82. void build(int N) {
  83.   now = 2 * N;
  84.   int m = (1 << N) - 1;
  85.   push(m, N, N);
  86. }
  87.  
  88. map<int, ll> dp;
  89.  
  90. int main() {
  91.   int m;
  92.   cin >> n >> m;
  93.  
  94.   forn (i, m) {
  95.     int a, b;
  96.     cin >> a >> b;
  97.     --a; --b;
  98.     g[a][b] = g[b][a] = true;
  99.   }
  100.  
  101.   for (int i = 0; 2 * i <= n; ++i)
  102.     build(i);
  103.  
  104.   cerr << masks.size() << endl;
  105.  
  106.   dp[0] = 1;
  107.   forn (i, masks.size()) {
  108.     int m = masks[i].second;
  109.     if (dp.find(m) == dp.end()) continue;
  110.     ll v = dp[m];
  111.  
  112.     if (m == (1 << n) - 1) {
  113.       cout << v << endl;
  114.       return 0;
  115.     }
  116.  
  117.     int fr = 0;
  118.     while (m & (1 << fr)) ++fr;
  119.     int A = fr;
  120.  
  121.     for (int B = A + 1; B < n; ++B) {
  122.       if (!(m & (1 << B)) && g[A][B]) {
  123.         int mm = m | (1 << A) | (1 << B);
  124.         dp[mm] += v;
  125.       }
  126.     }
  127.  
  128.   }
  129.  
  130.   cout << 0 << endl;
  131.  
  132.   return 0;
  133. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement