EntropyIncreaser

LibreOJ beta R4 subset

Nov 24th, 2017
175
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.24 KB | None | 0 0
  1. #include <cstdio>
  2. #include <cstring>
  3.  
  4. using namespace std;
  5.  
  6. typedef long long ll;
  7.  
  8. struct edge {
  9.     int v;
  10.     edge* next;
  11. };
  12.  
  13. const int N = 510;
  14.  
  15. int n, ans;
  16. ll a[N];
  17. int match[N];
  18. bool vis[N];
  19. edge* g[N];
  20.  
  21. void add_edge(int u, int v);
  22. ll gcd(ll a, ll b);
  23. bool dfs(int u);
  24.  
  25. int main() {
  26. //  freopen("test.in", "r", stdin);
  27.     scanf("%d", &n);
  28.     for (int i = 1; i <= n; ++i) {
  29.         scanf("%lld", &a[i]);
  30.         for (int j = 1; j < i; ++j)
  31.             if (gcd(a[i], a[j]) == 1 && gcd(a[i] + 1, a[j] + 1) == 1) {
  32.                 add_edge(i, j);
  33.                 add_edge(j, i);
  34.             }
  35.     }
  36.     for (int i = 1; i <= n; ++i) {
  37.         memset(vis, 0, sizeof(vis));
  38.         if (!match[i])
  39.             if (dfs(i))
  40.                 ++ans;
  41.     }
  42.     printf("%d\n", n - ans);
  43.     return 0;
  44. }
  45.  
  46. inline void add_edge(int u, int v) {
  47.     static edge pool[N * N];
  48.     static int top;
  49.     edge* p = pool + ++top;
  50.     p->v = v;
  51.     p->next = g[u];
  52.     g[u] = p;
  53. }
  54.  
  55. ll gcd(ll a, ll b) {
  56.     if (!b)
  57.         return a;
  58.     return gcd(b, a % b);
  59. }
  60.  
  61. bool dfs(int u) {
  62.     for (edge* p = g[u]; p; p = p->next)
  63.         if (!vis[p->v]) {
  64.             if (!match[p->v]) {
  65.                 match[p->v] = u;
  66.                 match[u] = p->v;
  67.                 return true;
  68.             }
  69.             vis[p->v] = true;
  70.             if (dfs(match[p->v])) {
  71.                 match[p->v] = u;
  72.                 match[u] = p->v;
  73.                 return true;
  74.             }
  75.         }
  76.     return false;
  77. }
Advertisement
Add Comment
Please, Sign In to add comment