题目链接:点击查看

题目大意:给出一张 n 个点和 m 条边组成的有向无环图,每个节点都有一个开关和一个灯泡,初始时节点 1 的灯泡是亮的,每次操作开关可以将当前灯泡的状态置反,且会对子节点的开关产生连锁反应,问至少需要操作多少次才能将所有的灯泡关上

题目分析:看到有向无环图首先想到拓扑,但是如果暴力拓扑转移每个点的状态的话,时间复杂度是 n * n 级别的,必定会超时,但是看到数据范围其实有经验的同学就会想到利用 bitset 优化了,可以优化掉 64 层的时空复杂度,经过优化后的时空复杂度就可以暴力转移了,令每个节点都维护一个 bitset 变量,记录一下前面有哪些节点会影响到该节点,如果有奇数个节点影响到了该节点的话,因为每个灯泡初始时都是灭着的,所以需要利用一次操作将其关闭,如果是偶数个则直接跳过即可,每次利用位运算向下传递状态就好了

代码:

#include<iostream>
#include<cstdio>
#include<string>
#include<ctime>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<stack>
#include<climits>
#include<queue>
#include<map>
#include<set>
#include<sstream>
#include<cassert>
#include<bitset>
using namespace std;typedef long long LL;typedef unsigned long long ull;const int inf=0x3f3f3f3f;const int N=4e4+100;bitset<N>b[N];vector<int>node[N];int du[N],n,m;int topo()
{int ans=0;queue<int>q;q.push(1);b[1][1]=1;while(q.size()){int u=q.front();q.pop();if(b[u].count()&1){b[u][u]=1;ans++;}for(auto v:node[u]){b[v]|=b[u];if(--du[v]==0)q.push(v);}}return ans;
}int main()
{
#ifndef ONLINE_JUDGE
//  freopen("input.txt","r",stdin);
//  freopen("output.txt","w",stdout);
#endif
//  ios::sync_with_stdio(false);scanf("%d%d",&n,&m);while(m--){int u,v;scanf("%d%d",&u,&v);node[u].push_back(v);du[v]++;}printf("%d\n",topo());return 0;
}

牛客 - Strange Bulbs(bitset优化拓扑)相关推荐

  1. 牛客练习赛22C Bitset

    牛客练习赛22C 一共有 n个数,第 i 个数是 xi  xi 可以取 [li , ri] 中任意的一个值. 设 ,求 S 种类数. 感觉二进制真是一个神奇的东西. #include <iost ...

  2. 牛客挑战赛47 C 条件(Floyd bitset优化)

    牛客挑战赛47 C 条件 思路:首先我们要两个图,一个是一定能到达的,一个是可能到达的,如果我们使用floyd (n^3)就有可能会超时,因为只要求询问能否到达,所以权值只有0和1,那我们可以使用bi ...

  3. 【牛客 - 551G】CSL的训练计划(二分 + 拓扑排序 + 优化卡常)

    题干: 链接:https://ac.nowcoder.com/acm/contest/551/G 来源:牛客网 题目描述 众所周知,CSL 是一个负责的集训队队长.为了让集训队的学弟们训练更加饱和,他 ...

  4. 牛客多校2 - Greater and Greater(bitset优化暴力)

    题目链接:点击查看 题目大意:给出一个长度为 n 的数组 a ,再给出一个长度最大为 m 的数组 b,现在问在 a 中所有长度为 m 的子数组中,有多少个子数组满足每个相应的元素都大于数组 b 题目分 ...

  5. 牛客 - Prize(bitset优化暴力)

    题目链接:点击查看 题目大意:给出一个长度为 n 的模式串 s ,再给出一个长度为 m 的匹配串,匹配串的每一位的可行数字都会给出,现在问最多可以匹配多少个字符串 题目分析:模式串和匹配串的匹配,AC ...

  6. C 简单瞎搞题(牛客练习赛22)(bitset优化dp)

    Bitset优化Dp 题目链接 一般DP做法 显然后面的数是与前面的数字相关的,所以我们有dp数组,dp[i][j]dp[i][j]dp[i][j]选取了jjj个数,iii是否可以被创造出来,如果可以 ...

  7. 2021牛客暑期多校训练营8 F-Robots(bitset优化dp)

    F-Robots 第一种第二种机器人直接O(n)O(n)O(n)判断即可. 第三种机器人暴力dp,用bitset优化. bitset<250005> b[i][j] 表示从(i,j)(i, ...

  8. 【牛客 - 368D】动态连通块(并查集+bitset优化)

    题干: 小T有n个点,每个点可能是黑色的,可能是白色的. 小T对这张图的定义了白连通块和黑连通块: 白连通块:图中一个点集V,若满足所有点都是白点,并且V中任意两点都可以只经过V中的点互相到达,则称V ...

  9. 【牛客每日一题】 4.13 Xorto(前缀异或和,枚举优化/映射)

    链接:https://ac.nowcoder.com/acm/problem/14247 来源:牛客网 题目描述 给定一个长度为n的整数数组,问有多少对互不重叠的非空区间,使得两个区间内的数的异或和为 ...

最新文章

  1. uwp连接mysql数据库_mysql 8.0 新版本出现group by 语句不兼容问题
  2. CC2540开发板学习笔记(一)——LED点亮
  3. rabbitmqctl status报错
  4. JTAG之IO口作为普通IO口使用时注意事项
  5. 【数学建模】图论模型-Floyd算法(最优化)
  6. 「Apollo」protobuf报错No module named ‘google‘
  7. Meteor环境安装配置
  8. 认知无线电matlab代码详解,认知无线电频谱感知之功率检测matlab代码.docx
  9. 从文件系统迁移到ASM上
  10. 3款强大的BootStrap的可视化制作工具推荐
  11. mysql base64的编码与解码
  12. python如何读取二进制文件为图片_关于Python获取图片文件二进制数据的问题(获取为空)...
  13. webpack配置路径及hash版本号,利用html-webpack-plugin自动生成html模板
  14. 二十九 Python分布式爬虫打造搜索引擎Scrapy精讲—selenium模块是一个python操作浏览器软件的一个模块,可以实现js动态网页请求...
  15. GIM三维建模设计软件
  16. pytorch dataloader参数解析
  17. 史蒂夫·乔布斯传记_Chapter 4: Atari and India
  18. vue调取电脑摄像头实现拍照功能
  19. 《(数学篇)》 复数运算
  20. uniapp苹果无法上架_uni-app 打包ios上架app store流程

热门文章

  1. mysql残余文件的清理
  2. MySQL高级 - 存储引擎 - 特性
  3. Btree索引和Hash索引
  4. FastDFS集群部署
  5. dice系数什么意思_轮胎上的数字和字母是什么意思 轮胎上的红点黄点是什么意思...
  6. hough变换检测直线 matlab,求能够运行的用matlab进行hough变换直线检测的程序。急!...
  7. 计算机游戏 综述,计算机游戏对玩家认知能力影响的研究综述
  8. html时钟翻牌效果,干货满满!如何优雅简洁地实现时钟翻牌器(支持JS/Vue/React)
  9. 210314阶段三VS使用Linux 的sqlite3 API
  10. 200819C阶段一C++面向对象的编程思想