zoukankan      html  css  js  c++  java
  • [bzoj3004][SDOI2012]吊灯——樹形DP

    Brief Description

    給定一棵樹, 判斷是否可以將其分成(frac{n}{k})個聯通塊, 其中每個聯通塊的大小均爲k.

    Algorithm Design

    我們有一個結論: k可行iff存在(frac{n}{k})個點, 以這些點爲根的子樹大小爲k或k的倍數.
    讀者可以自行yy一下證明.
    有了這個結論之後, 我們可以算出每個size, 用一個桶統計一下就好了.

    Code

    #include <algorithm>
    #include <cctype>
    #include <cstdio>
    #include <cstring>
    const int maxn = 1200000;
    int fa[maxn], n, divide[maxn], size[maxn], f[maxn], tot = 0;
    void fuck(int n) {
      int i;
      for (i = 1; i * i < n; i++) {
        if (n % i == 0) {
          divide[tot++] = i;
          divide[tot++] = n / i;
        }
      }
      if (i * i == n)
        divide[tot++] = i;
      std::sort(divide, divide + tot);
    }
    int main() {
      //  freopen("sdoi12_divide.in", "r", stdin);
      //  freopen("sdoi12_divide.out", "w", stdout);
      scanf("%d", &n);
      char ch = getchar();
      int cnt = 0;
      while (cnt < (n - 1)) {
        int x = 0;
        while (!isdigit(ch))
          ch = getchar();
        while (isdigit(ch)) {
          x = x * 10 + ch - '0';
          ch = getchar();
        }
        cnt++;
        fa[cnt + 1] = x;
      }
      fuck(n);
      for (int T = 1; T <= 10; T++) {
        printf("Case #%d:
    ", T);
        memset(size, 0, sizeof(size));
        memset(f, 0, sizeof(f));
        for (int i = 2; i <= n; i++) {
          if (T != 1) {
            fa[i] = (fa[i] + 19940105) % (i - 1) + 1;
          }
        }
        for (int i = n; i; i--)
          size[fa[i]] += ++size[i];
        for (int i = 1; i <= n; i++)
          f[size[i]]++;
        for (int i = 0; i < tot; i++) {
          int tmp = 0;
          for (int j = divide[i]; j <= n; j += divide[i])
            tmp += f[j];
          if (tmp == n / divide[i]) {
            printf("%d
    ", divide[i]);
          }
        }
      }
    }
    
  • 相关阅读:
    skymvc文件上传支持多文件上传
    skymvc网站测试之mysql数据生成
    欢迎使用skymvc框架,简单易用的php框架
    模式识别与机器学习(第四章学习记录和心得)
    python实现MICD分类器
    python实现MED分类器
    模式识别与机器学习(第一至三章学习记录和心得)
    软工实践个人总结
    第09组 每周小结 (3/3)
    第09组 每周小结 (2/3)
  • 原文地址:https://www.cnblogs.com/gengchen/p/6579442.html
Copyright © 2011-2022 走看看