题目描述

小w偶然间见到了一个DAG。这个DAG有m层,第一层只有一个源点,最后一层只有一个汇点,剩下的每一层都有k个节点。现在小w每次可以取反第i(1<i<n-1)层和第i+1层之间的连边。也就是把原本从(i,k1)连到(i+1,k2)的边,变成从(i,k2)连到(i+1,k1)。请问他有多少种取反的方案,把从源点到汇点的路径数变成偶数条?答案对998244353取模。

输入描述

一行两个整数m,k。接下来m-1行,第一行和最后一行有k个整数0或1,剩下每行有k2个整数0或1,第(j-1)×k+t个整数表示(i,j)到(i+ 1,t)有没有边。

输出描述

一行一个整数表示答案。

输入样例

5 3
  1 0 1
  0 1 0 1 1 0 0 0 1
  0 1 1 1 0 0 0 1 1
  0 1 1

输出样例

4

20%的数据满足n≤10,k≤2。
  40%的数据满足n≤103,k≤2。
  60%的数据满足m≤103,k≤5。
  100%的数据满足4≤m≤104,k≤10。

分析

看不懂题目手玩样例玩了一个小时都没玩出来最后发现自己少连了一条边

由于路径数量并不需要知道具体的值,只需要知道奇偶性就行,而且发现k还这么小,所以考虑状压dp

dp[i][s]表示到达i层时 到达各点方案数的奇偶性情况为s 的方案数。

这个可以根据题目中给出的边求出下一个状态,因为存在反转所以每次有两种转移方式

于是某个憨憨高兴地用k2的转移方法获得了60pts的好成绩

对于每次给的边,我们可以预处理出每个点与下一层点的连边情况并状压起来

因为只有奇数转移才会影响状态,所以只需要找到方案数为奇数的点然后让下一个状态异或上之前预处理好的它的连边状态就可以得到下一层的状态了

Code

#include<cstdio>
const int mod=;
int n,K,st,ans,dp[][],V[][];
int main()
{
scanf("%d%d",&n,&K);
for(int i=,a;i<=K;i++)scanf("%d",&a),st=(st<<)+a;dp[][st]=;
for(int i=;i<n-;i++)
{
int a[]={},b[]={};
for(int j=K;j>=;j--)for(int k=K,o;k>=;k--)
scanf("%d",&o),a[j]|=o<<(k-),b[k]|=o<<(j-);
for(st=;st<=(<<K)-;st++)if(dp[i][st])
{
int ed1=,ed2=;
for(int j=;j<=K;j++)if(st&(<<(j-)))ed1^=a[j],ed2^=b[j];
(dp[i+][ed1]+=dp[i][st])%=mod;
(dp[i+][ed2]+=dp[i][st])%=mod;
}
}
for(int i=K;i>=;i--)scanf("%d",&V[i][]);
for(st=;st<=(<<K)-;st++)if(dp[n-][st])
{
int cnt=;
for(int j=;j<=K;j++)if(st&(<<(j-))&&V[j][])cnt^=;
if(cnt==)(ans+=dp[n-][st])%=mod;
}
printf("%d\n",ans);
}

【CSP模拟赛】Adore(状压dp 二进制)的更多相关文章

  1. 4.26 省选模拟赛 T3 状压dp 差分求答案

    LINK:T3 比较好的题目 考试的时候被毒瘤的T2给搞的心态爆炸 这道题连正解的思路都没有想到. 一看到题求删除点的最少个 可以使得不连通. 瞬间想到最小割 发现对于10分直接跑最小割即可. 不过想 ...

  2. NOIp模拟赛 巨神兵(状压DP 容斥)

    \(Description\) 给定\(n\)个点\(m\)条边的有向图,求有多少个边集的子集,构成的图没有环. \(n\leq17\). \(Solution\) 问题也等价于,用不同的边集构造DA ...

  3. POJ1185 状压dp(二进制//三进制)解法

    很显然这是一道状压dp的题目 由于每个最优子结构和前两行有关,一个显而易见的想法是用三维dp[i][j][k]用来记录在第i行下为j状态,i - 1行为k状态时的最大值,然而dp[100][1 < ...

  4. BZOJ 1688: [Usaco2005 Open]Disease Manangement 疾病管理 状压DP + 二进制 + 骚操作

    #include <bits/stdc++.h> #define setIO(s) freopen(s".in","r",stdin) #defin ...

  5. 模拟赛毒瘤状压DP题:Kronican

    Kronican 内存限制:32 MiB 时间限制:2000 ms 标准输入输出 题目类型:传统 评测方式:文本比较 上传者: cqbzgm 题目描述 Mislav有N个无限体积的杯子,每一个杯子中都 ...

  6. 2018.10.17 NOIP模拟 管道(状压dp)

    传送门 状压dp好题. 怎么今天道道题都有点东西啊 对于今天题目神仙出题人先膜为上策:%%%%DzYoAk_UoI%%%% 设f[i][j]f[i][j]f[i][j]表示选取点的状态集合为iii,当 ...

  7. 2018.09.08 NOIP模拟 division(状压dp)

    这么sb的题考场居然写挂了2233. 假设n=∏iaiki" role="presentation" style="position: relative;&qu ...

  8. 2018.08.29 NOIP模拟 movie(状压dp/随机化贪心)

    [描述] 小石头喜欢看电影,选择有 N 部电影可供选择,每一部电影会在一天的不同时段播 放.他希望连续看 L 分钟的电影.因为电影院是他家开的,所以他可以在一部电影播放过程中任何时间进入或退出,当然他 ...

  9. bzoj 5299: [Cqoi2018]解锁屏幕 状压dp+二进制

    比较简单的状压 dp,令 $f[S][i]$ 表示已经经过的点集为 $S$,且最后一个访问的位置为 $i$ 的方案数. 然后随便转移一下就可以了,可以用 $lowbit$ 来优化一下枚举. code: ...

随机推荐

  1. centos安装docker以及docker-compose

    1.yum更新 # sudo yum update 2.如果安装docker旧版本,旧版本的卸载 # sudo yum remove docker docker-common docker-selin ...

  2. 4.linux下配置Golang的环境变量

    装好linux后优先在linux上配置Golang开发环境. 1.到Go语言中文网下载Linux安装包 https://studygolang.com/dl 2.到下载的目录下解压,下载的文件一般在“ ...

  3. MySQL JOIN 连接时,条件为以逗号分隔的字段与 ID 相匹配

    一.背景 有一张相片表,一张相片所属标签表,一张相片可以归属于多个标签,表结构如下: 现在需要通过一次查询,得到每一张照片对应的标签名称,标签名称之间以固定的分隔符连接,结果如下图: 二.查询语句 原 ...

  4. zubax_gnss移植到STM32F407

    源码下载:https://github.com/Zubax/zubax_gnss.git 源码默认支持STM32F107芯片 STM32 HAL库测试:zubax_gnss\bootloader\zu ...

  5. WPF登录功能,对于密码框的操作,其实WPF有个PasswordBox专门的密码框控件,完全可以选择自己要显示的密码符号。

    在链接数据库后,点击登录时需要判断用户名和密码框是否为空,而PasswordBox不像textbox那样判断 textbox判断文本框为空 if (this.UserName.Text.Trim()= ...

  6. 程序写入mycat中文乱码解决(也包括mysql编码修改)

    乱码问题可能出现的三个地方 1.程序连接的编码要设置 jdbc:mysql://192.168.1.1:8066/TESTDB?useUnicode=true&characterEncodin ...

  7. 批量导入数据到InnoDB表速度优化

    1.使用Load data: 2. SET autocommit=0; ... SQL import statements ... COMMIT; 3. SET unique_checks=0; .. ...

  8. 安装folly库以及folly的ConcurrentHashMap的简单使用

    我在写grpc的实例时, 需要使用一个多线程的hash map, C++标准库中没有多线程的hash map, facebook开源的folly中存在大量的基础类, 中间存在一个高性能的hash ma ...

  9. Android笔记(五十九)Android总结:四大组件——Service篇

    什么是服务? 服务(service)是Android中实现程序后台运行的解决方案,适用于去执行那些不需要和用户交互并且还需要长期运行的任务.服务的运行不依赖于任何用户界面. 服务运行在主线程中,所以在 ...

  10. Linux实验:ssh免密码配置

    [实验目的]    1)了解ssh工具的作用    2)熟悉ssh配置过程    3)理解ssh原理[实验原理]    SSH是目前比较可靠的专为远程登录会话和其他网络服务提供安全的协议.不同主机之间 ...