https://codeforces.com/problemset/problem/1594/E2

一个 W A WA WA了 N N N发的 d p dp dp。
题意:给一个满二叉树 ,类似于线段树一样,若父节点索引为 k k k,定义它的左儿子为 2 × k 2\times k 2×k,右儿子为 2 × k + 1 2\times k+1 2×k+1。 现在可以对每个节点赋值,取值范围为{ 0 , 1 , 2 , 3 , 4 , 5 0,1,2,3,4,5 0,1,2,3,4,5}。但是,相邻节点的值异或和不能为 0 0 0或 1 1 1,其中,有些点已经被固定。问有多少种赋值方案。
泪目,果然是我太菜!
思路:定义 d p i j dp_{ij} dpij​为第 i i i 个节点赋值为 j j j 的方案数,我们从被固定的点由大到小进行遍历,从子节点推到父节点。为什么不能从父节点推子节点呢?
因为我不会/(ㄒ_ㄒ)/~ 。
因为从父节点推子节点,最后会存在多条路径,每条路劲的叶子节点如果为答案,那么每一条路径的答案不能重复,这就要求,往不同方向走的时候要分开处理组合数!大神应该会处理,但我是真不会ToT!

#include<bits/stdc++.h>using namespace std;
//    clock_t start, end;
//    start = clock();
//    end = clock();
//    cout << (double) (end - start) / CLOCKS_PER_SEC << endl;
//ios::sync_with_stdio(false);
#define  int long long
#define rep(i, x, y) for(int i=(x);i<=(y);++i)
#define dep(i, x, y) for(int i=(x);i>=(y);--i)
#define gcd(a, b) __gcd(a,b)
const long long mod = 1e9 + 7;
const int maxn = 1e3 + 10;int lowbit(int x) { return x & -x; }bool ispow(int n) { return (n & (n - 1)) == 0; }//O(1) 判断是否是 2^k(2的k次方)unordered_map<char, int> mp;
unordered_map<int, vector<int> > dp;
unordered_map<int, bool> node;
unordered_map<int, bool> color;
int SUM = 0;int fast(int a, int n) {int base = a, res = 1;while (n) {if (n & 1)res = ((res % mod) * (base % mod)) % mod;base = ((base % mod) * (base % mod)) % mod;n >>= 1;}return res;
}signed main() {mp['w'] = 0, mp['y'] = 1, mp['g'] = 2, mp['b'] = 3, mp['r'] = 4, mp['o'] = 5;int n;vector<int> vec(7, 1);vector<int> V(7, 0);int k;cin >> k;cin >> n;priority_queue<int> p;for (int i = 1; i <= n; i++) {char s[10];int x;scanf("%lld%s", &x, &s);dp[x] = V;dp[x][mp[s[0]]] = 1;node[x] = true;color[x] = true;p.push(x);SUM++;}int flag;while (!p.empty()) {int v = p.top();p.pop();int fa = v / 2;if (fa == 0)break;if (!node[fa]) {node[fa] = true;p.push(fa);SUM++;}if (color[fa]) {for (int i = 0; i < 6; i++) {if (dp[fa][i] == 1)flag = i;}int sum = 0;for (int i = 0; i < 6; i++) {if ((i ^ flag) == 1 || (i ^ flag) == 0)continue;sum += dp[v][i];}dp[fa][flag] *= sum;dp[fa][flag] %= mod;continue;}if (dp[fa].size() == 0)dp[fa] = vec;for (int i = 0; i < 6; i++) {int sum = 0;for (int j = 0; j < 6; j++) {if ((i ^ j) == 1 || (i ^ j) == 0)continue;sum += dp[v][j];}dp[fa][i] *= sum;dp[fa][i] %= mod;}}int ans = 0;for (int i = 0; i < 6; i++) {ans += dp[1][i];}ans %= mod;SUM = ((int) 1 << k) - 1 - SUM;cout << ans % mod * fast(4, SUM) % mod << endl;return 0;
}

CF 1594 E2相关推荐

  1. 《人工智能及其应用》1-6章

    目录 第一章 绪论 1.1 人工智能的定义与发展 1.1.1 人工智能的定义 1.1.2 人工智能的起源与发展 1.2 人工智能的各种认知观 1.2.1 人工智能各学派的认知观 1.2.2 人工智能的 ...

  2. cl 7ar xyz index php,GIF 文件格式分析 -- chinawrc的世界 -- [北方博客].mht

    From: Subject: =?gb2312?B?R0lGIM7EvP648cq9t9bO9iAtLSBjaGluYXdyY7XEysC95yAtLSBbsbG3vbKp?= =?gb2312?B? ...

  3. 人工智能导论笔记-第四章-不确定性推理方法

    不确定推理: 推理:从已知事实(证据)出发,通过运用相关知识逐步推出结论或证明某个假设成立或不成立的思维过程 不确定推理:从不确定的初始证据出发,通过运用不确定的性的知识,最终推出一个具有一定程度不确 ...

  4. 《人工智能及其应用》课程笔记(四)第4章 非经典推理

    目录 本章内容 4.1 经典推理和非经典推理 4.2 不确定性推理 4.2.1 不确定性的表示和度量 4.2.2 不确定性的算法 4.3 概率推理 4.3.1 概率的基本性质和计算公式 4.4 主观贝 ...

  5. QQ2013协议分析(解密篇)

    版本信息:QQ2013beta2 测试QQ:2632949572 QQ密码两次md5所得密钥(MD5(MD5(QQ密码)+0x00000000+QQ号码)):47 D5 0A 0E 5E AD D1 ...

  6. XTU | 人工智能入门复习总结

    写在前面 本文严禁转载,只限于学习交流. 课件分享在这里了. 还有人工智能标准化白皮书(2018版)也一并分享了. 文章目录 绪论 人工智能的定义与发展 定义 起源与发展 各种认知观 目前人工智能主要 ...

  7. Javascript 实现gb2312和utf8编码的互换

    今天才找到的,只有gb2312转成utf8的函数,后来自己按照作者思路又加写了一个utf8转gb2312 的函数 先写这,以免忘了 <script language="javascri ...

  8. 第二章 不确定性推理方法

    第二章 不确定性推理方法 2.1 不确定性推理的基本概念 2.1.1 不确定性推理中的基本问题 2.1.2 概率方法 2.2 可信度方法 2.2.1 可信度概念 2.2.2 C-F模型 2.3 证据理 ...

  9. 人工智能及其应用(蔡自兴)期末复习

    人工智能及其应用(蔡自兴)期末复习 原Markdown文件获取请跳转:https://github.com/anda522/CourseReview 相关资料: 人工智能期末复习 人工智能复习题 人工 ...

最新文章

  1. cop2000计算机组成原理,COP2000计算机组成原理-南昌大学网络教学平台.doc
  2. 012_Spring Data Redis
  3. pytorch学习:xavier分布和kaiming分布
  4. 文献记录(part94)--Clustering and outlier detection using isoperimetric number of trees
  5. Activity和Service通信 使用BroadcastReceiver
  6. 3.2)深度学习笔记:机器学习策略(2)
  7. java删除javaee_JavaEE--集合--删除List中指定元素
  8. (原创)我也玩万能表单(自定义表单)(一)
  9. 95-080-100-源码-启动-类加载
  10. 螺钉装弹垫平垫机器人_一种批量组装螺钉、弹垫、平垫的工装及使用方法
  11. 2021-02-22 【转载】什么是GCJ-02火星坐标系;为什么天地图没有偏移
  12. (一)Linux下C++ OpenCV开发环境搭建
  13. linux mysql 5.7.13 安装_mysql 5.7.13 安装配置方法图文教程(linux)
  14. Nginx中保持长连接的配置 - 运维记录
  15. axure 抖音部件库_抖音常用工具和素材库大全
  16. 关于列表的一些操作函数
  17. px4初探-qgroundcontrol安装
  18. 使用SQLite打开本地.db文件
  19. Android美女拼图游戏
  20. 使用Jasypt对SpringBoot配置文件加密(数据源为SpringBoot默认的数据源HikariDataSource)

热门文章

  1. cadence allegro学习记录(四)
  2. [网站]node.js如何在云服务器上搭建
  3. unity螺旋丸特效实现
  4. 刷题记录:牛客NC15445wyh的吃鸡
  5. react-native如何解决Android机(主要是华为手机)上人民币符号¥只显示一横
  6. win10计算机重新启动,win10电脑无故重新启动求解决
  7. C语言实现矩阵旋转输出
  8. 当听障人士实现手语自由:手语AI平台的产业狂想
  9. 2020最新全球十大期货交易平台排名
  10. LeetCode 172. Factorial Trailing Zeroes