LA 7578. ACM 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;
}

原文地址:https://www.cnblogs.com/P6174/p/8159274.html

时间: 2024-12-17 03:52:56

LA 7578. ACM World Finals 2016 C. Ceiling Function的相关文章

LA 7578. ACM World Finals 2016 L. Swap Space

贪心 #include <cstdio> #include <algorithm> using std::sort; #define kN 1000000 struct vv { int a, b; vv(int a = 0, int b = 0): a(a), b(b) {} }p[kN], q[kN]; bool cmp1(vv xx, vv yy) { if (xx.a == yy.a) return xx.b > yy.b; return xx.a < yy.a

2016 ICPC World Finals -Ceiling Function

直接建树伪哈希,哈希大法好,哈希出奇迹 然而本非好久没刷题了,WA了好多发,orz #include<cstdio> #include<cstring> #include<algorithm> #include<map> using namespace std; #define ul unsigned long long const ul mod=1000000009; const ul modx=100000007; const int maxn=2008

LA 8043. ACM-ICPC World Finals 2017 E. Need for Speed

二分 LA上的题目居然和原题有差别!变成了多组数据 下面这个程序是按原题写的 #include <iostream> #include <cstdio> #include <algorithm> int main() { int n, t; std::cin >> n >> t; double d[1000], s[1000]; for (int i = 0; i < n; i++) std::cin >> d[i] >&

LA 7150. ACM-ICPC World Finals 2015 A. Amalgamated Artichokes

水题 #include <cstdio> #include <cmath> #include <algorithm> int main() { int p, a, b, c, d, n; scanf("%d%d%d%d%d%d", &p, &a, &b, &c, &d, &n); double maxans = p * (sin(a + b) + cos(c + d) + 2), ans = 0; fo

LA 7155. ACM-ICPC World Finals 2015 F. Keyboarding

BFS 正解就是乱搞系列 #include <cstdio> #include <cstring> char G[50][50]; bool mk[50][50][10001]; struct QueueNode { int x, y, cur, dist; QueueNode (int x = 0, int y = 0, int cur = 0, int dist = 0): x(x), y(y), cur(cur), dist(dist) {} } Q[50 * 50 * 10

2016河南省第九届ACM程序设计竞赛【正式赛真题】

A题:表达式求值 时间限制:1000 ms  |  内存限制:65535 KB 描述 假设表达式定义为:1. 一个十进制的正整数 X 是一个表达式.2. 如果 X 和 Y 是 表达式,则 X+Y, X*Y 也是表达式; *优先级高于+.3. 如果 X 和 Y 是 表达式,则 函数 Smax(X,Y)也是表达式,其值为:先分别求出 X ,Y值的各位数字之和,再从中选最大数.4.如果 X 是 表达式,则 (X)也是表达式.例如:表达式 12*(2+3)+Smax(333,220+280) 的值为 6

2016/02/15 codes

return e.addTest = function(a,b){ if(typeof a == "object") for(var d in a )y(a,d)&& e.addTest(d,a[d]); else{a = a.toLowerCase(); if(e[a]!== c)return e; b = typeof b = "function"?b():b, typeof f != "undefined" &&am

[HNOI2012]矿场搭建

明明是Acm World Finals 2011的原题,把数据范围改小了就放出来了?!这样不好,, 昨天讲完双连通分量今天A一道点双的题. Description 煤矿工地可以看成是由隧道连接挖煤点组成的无向图.为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出路逃到救援出口处.于是矿主决定在某些挖煤点设立救援出口,使得无论哪一个挖煤点坍塌之后,其他挖煤点的工人都有一条道路通向救援出口.请写一个程序,用来计算至少需要设置几个救援出口,以及不同最少救援出口的设置方案总数. Input 输

Prototypes analyze(二叉排序树,不同树形个数)

Prototypes analyze 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描述 ALpha Ceiling Manufacturers (ACM) is analyzing the properties of its new series of Incredibly Collapse-Proof Ceilings (ICPCs). An ICPC consists of n layers of material, each with a different v