zoukankan      html  css  js  c++  java
  • LA 7578. ACM-ICPC World Finals 2016 C. Ceiling Function

    树的同构

    #include <iostream>
    using std::cin;
    using std::cout;
    using std::endl;
    
    struct treenode {
      int val;
      treenode *lc, *rc;
      treenode(int val = 0): val(val), lc(NULL), rc(NULL) {}
    }tree[50][20];
    
    int i, cnt, res;
    
    void add_node(treenode *node) {
      if (node->val < res)
        if (node->lc == NULL)
          node->lc = &(tree[i][++cnt] = treenode(res));
        else
          add_node(node->lc);
      else
        if (node->rc == NULL)
          node->rc = &(tree[i][++cnt] = treenode(res));
        else
          add_node(node->rc);
    }
    
    bool isomorphism(treenode *t1, treenode *t2) { //两棵树是否同构 
      if (t1 == NULL && t2 == NULL)
        return true;
      if (t1 == NULL || t2 == NULL)
        return false;
      if (isomorphism(t1->lc, t2->lc) && isomorphism(t1->rc, t2->rc))
        return true;
      return false;
    }
    
    int main() {
      int n, k;
      cin >> n >> k;
      int sum = n;
      for (i = 0; i < n; ++i) {
        cnt = 0;
        for (int j = 0; j < 20; ++j)
          tree[i][j] = treenode();
        treenode *root = &tree[i][0];
        cin >> root->val;
        for (int j = 1; j < k; ++j) {
          cin >> res;
          add_node(root);
        }
        for (int j = 0; j < i; ++j)
          if (isomorphism(root, &tree[j][0])) {
            --sum;
            break;
          }
      }
      cout << sum << endl;
      return 0;
    }
    
  • 相关阅读:
    设计模式学习笔记之命令模式
    JavaEE复习三
    ubuntu下安装UltraEdit
    转载:Ubuntu下deb包的安装方法
    查看linux系统版本是32位还是64位
    手动编译生成apk
    android service文章转载
    @+android:id的一些记录
    android Tweened Animations
    ubuntu下打开chm文件
  • 原文地址:https://www.cnblogs.com/P6174/p/8159274.html
Copyright © 2011-2022 走看看