题意:一个长度为 n 的数组 a,有 q 个条件,每个条件有 3 个整数 i,j,x,表示 ai | aj = x。找出满足条件的最小字典序的数组 a。

思路:用二进制看每个数,通过 ai | aj = x,我们不能确定第 i 个数和第 j 个数哪一位是 1,但能确定哪些位一定是 0,所以我们可以求出每个数的最大值是和这个位置有关的 x 全部 & 在一起,我们用一个数组 f 来维护每个数最多能贡献多少。然后从小到大遍历数组 a,每次遍历确定一个数,假设当前遍历到第 i 个数,再遍历所有与 i 有关的 j 和 x,如果 j > i,那么尽量要让 aj 来贡献出 x,aj 可以贡献的部分是 f j & x,不能贡献的部分是 ~f j & x,那么这部分就需要 ai 来提供,如果 j < i,aj已经是确定的最小值,所以 aj 不能贡献的部分为 ~ aj & x, 这部分同样需要 ai 来提供,所以 ai 的值就是把这些需要 ai 来提供的部分 | 在一起。

代码:

#include<bits/stdc++.h>
#define pb push_back
#define all(x) x.begin(), x.end()
using namespace std;
typedef long long ll;
typedef pair<int, int> PII;
const int N = 2e5 + 10, P = 1e9 + 7, mod = 998244353;
void solve(){int n, q;cin >> n >> q;vector<int> f(n + 1, (1 << 30) - 1);vector<PII> v[n + 1];for(int i = 1; i <= q; i++) {int a, b, c;cin >> a >> b >> c;f[a] &= c, f[b] &= c;v[a].pb({b, c});v[b].pb({a, c});}for(int i = 1; i <= n; i++){int t = 0;for(auto p : v[i]) {int j = p.first, x = p.second;t |= x & ~f[j];if(j == i) t = x;}f[i] = t;cout << t << " ";}
}
int main(){ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);int tt;//cin >> tt;//while(tt--) {solve();//}return 0;
}

CF 1715 D. 2+ doors 位运算 1900相关推荐

  1. [CodeForces gym 102956 D] Bank Security Unification(位运算优化dp)

    problem cf链接 solution 读完题先直接暴力 dpdpdp 拿出来,dpi=max⁡j<i{dpj+(fi&fj)}dp_i=\max_{j<i}\big\{dp_ ...

  2. 汇编语言-010(循环移位ROL,ROR 、进位循环进位RCL,RCR 、有符号数溢出 、双精度移位SHLD,SHRD、SHL和ADD计算 、位运算应用)

    1 :循环移位ROL,ROR,带进位循环进位RCL,RCR .386 .model flat,stdcall.stack 4096 ExitProcess PROTO,dwExitCode:DWORD ...

  3. 汇编指令 栈现场保护 算数运算 位运算 比较指令 跳转指令 循环指令 寻址方式

    文章目录 1 nop 指令 2 现场保护指令 2.1 push 与 pop 2.2 pushad 与 popad 2.3 pushfd 与 popfd 3 内存操作 3.1 mov指令 3.2 mov ...

  4. 【位运算】起床困难综合症(包含错误思路点拨)

    原题 解题思路一(错误): 顺着做(每个数用数组存)的思路是人脑思路,但是电脑会TLE.我们可以反着来. 大概的思路就是先假设一个最终结果的最大值. 然后问电脑:这数运算回去(按照输入的门的顺序,逆着 ...

  5. python中不同进制的整数之间可以直接运算_Python 进制转换、位运算

    一.进制转换 编程用十进制,十进制转换为二进制.八进制.十六进制 In [135]: bin(23) Out[135]: '0b10111' In [136]: oct(23) Out[136]: ' ...

  6. python isodd()判断奇偶_位运算(1的个数;2.判断奇偶)

    1. 1的个数 int NumberOf1(intn){int count = 0;while(n) {++count; n=(n-1)&n; } } 同样一个问题,位运算可以提高程序的运行效 ...

  7. python 整数逆位运算_python训练营:注释、运算符、数据类型与位运算

    天学习的内容整理成脑图如下,其中带☆的是需要重点掌握的模糊知识点,需要加强训练和记忆. 二.具体学习内容 2.1 注释 2.1.1 多行注释 2.1.2 长字符串注释 2.2 运算符 2.2.1 算术 ...

  8. 洛谷P1896 [SCOI2005]互不侵犯 状压dp+位运算

    题目链接:https://www.luogu.org/problem/P1896 题意:n*n的格子填数,每个数填放位置的周围(8个)不能有其他的数 n<=9 ,矩形状压 f[i][j][s], ...

  9. mysql 使用位运算

    如果你不知道什么是位运算的话, 那么请你先去看看基础的C语言教程吧. 与运算 a & b  , 或运算 a | b ,  异或运算 a ^ b , 或者 你也可以将 与运算理解为 + 法  例 ...

  10. 位运算+取某一位+java_Java位运算小节

    2019新春支付宝红包技术大揭秘在线峰会将于03-07日开始,点击这里报名届时即可参与大牛互动. 位运算表达式由操作数和位运算符组成,实现对整数类型的二进制数进行位运算.位运算符可以分为逻辑运算符(包 ...

最新文章

  1. 最新网众 2490(XP) 客户端 去百度 去劫持 去快车
  2. 第二天 PYTHON 基本数据类型 - 数字 - 字符串
  3. odata协议里filter操作自带的函数 - endswith
  4. 修改dts后重编译_「正点原子FPGA连载」第二十章另一种方式编译ZYNQ镜像
  5. 特斯拉最强自动驾驶系统登场,实测视频火热出炉
  6. vant toast 指定挂载到指定位置_文档如何只允许编辑指定位置?2步限制编辑,保护文档不被修改...
  7. [控件]GridView网格视图
  8. 无线系列-无线通信系统组成
  9. iOS APP 逆向安全杂谈
  10. Excel宏教程 (宏的介绍与基本使用)
  11. 一个关于var函数计算方差 / 标准差的问题
  12. Spring Security OAuth2 开发指南
  13. Dissect RB-Tree
  14. 如何调试Kubernetes集群中的网络延迟问题
  15. 阿里云服务器白嫖和购买教程——学生向
  16. 《0Day安全》之堆溢出
  17. iqn怎么查 linux_Linux下配置iscsi-initiator - 存储资源
  18. 亲测有效的清华源使用教程
  19. java dsa算法_DSA算法
  20. 【正点原子MP157连载】第十六章 基本定时器实验-摘自【正点原子】STM32MP1 M4裸机CubeIDE开发指南

热门文章

  1. win10下装python
  2. 网吧用计算机性能配件清单,网吧组装电脑配置清单
  3. 物理卷、卷组与逻辑卷的关系及相关操作详述
  4. 【去哪儿旅行】产品分析报告
  5. Spring Security 小记 - @Secured(), @PreAuthorize() 及 @RolesAllowed()
  6. 安卓手机远程连接linux系统,电脑(Linux/Windows)使用SSH远程登录安卓(Android)手机实现无线传输和管理文件(图文详解)-Go语言中文社区...
  7. 爱五笔iWuBi for Mac(五笔练习工具)
  8. 单线多拨的原理+穿透
  9. 为知共享——让工作更轻松
  10. echarts封装 - 续2