Solution -「FJWC 2020」人生
\(\mathcal{Description}\)
有 \(n\) 个结点,一些结点有染有黑色或白色,其余待染色。将 \(n\) 个结点染上颜色并连接有向边,求有多少个不同(结点颜色不同或边不同)的图,满足:
- \(\forall \lang u,v\rang\in E,~1\le u<v\le n\);
- 相邻两点颜色不同的路径条数(包括单点)为奇数。
答案对 \(998244353\) 取模。
\(n\le2\times10^5\)。
\(\mathcal{Solution}\)
DP,显然从后往前考虑每个结点的连边情况。为方便理解,不妨设 \(g(u)\) 表示在某个确定的图上,从 \(u\) 出发的合法路径条数。发现对 \(g(u)\) 的奇偶性有影响的连边 \(\lang u,v\rang\) 中,应满足 \(v\) 与 \(u\) 异色且 \(2\not\mid g(v)\),且我们只关心如此 \(v\) 的个数。
然则需求信息量较小,可以开始 DP,令 \(f(i,w,b)\) 表示已为大于等于 \(i\) 的结点染好颜色,且白色的满足 \(2\not\mid g(v)\) 的 \(v\) 有 \(w\) 个,黑色的满足 \(2\not\mid g(v)\) 的 \(v\) 有 \(b\) 个。对于 \(f(i+1,w,b)\),一共已经确定完 \(c=n-i+1\) 个结点,不妨设 \(i\) 的颜色为白色,则有转移:
- \(f(i,w,b)\longleftarrow [b\not=0]2^{c-1}f(i+1,w,b)\);
- \(f(i,w+1,b)\longleftarrow2^{c-[b\not=0]}f(i+1,w,b)\);
答案则为
\]
注意到转移仅与 \(w,b\) 是否为 \(0\) 有关,答案仅与 \(w,b\) 的奇偶性有关,所以可以优化 \(f(i,w\in[0,2],b\in[0,2])\) 为:已为大于等于 \(i\) 的结点染好颜色,且白色的满足 \(2\not\mid g(v)\) 的 \(v\) 未出现 / 出现奇数次 / 出现偶数次,黑色同理,就能转移啦。
复杂度 \(\mathcal O(n)\),带约 \(10\) 倍常数。
\(\mathcal{Code}\)
/* Clearink */
#include <cstdio>
#define rep( i, l, r ) for ( int i = l, repEnd##i = r; i <= repEnd##i; ++i )
#define per( i, r, l ) for ( int i = r, repEnd##i = l; i >= repEnd##i; --i )
const int MAXN = 2e5, MOD = 998244353;
int n, a[MAXN + 5], pwr[MAXN + 5], f[MAXN + 5][3][3];
// 0: none, 1: odd, 2: even.
inline int mul( const long long a, const int b ) { return a * b % MOD; }
inline int add( int a, const int b ) { return ( a += b ) < MOD ? a : a - MOD; }
inline void addeq( int& a, const int b ) { ( a += b ) >= MOD && ( a -= MOD ); }
int main() {
freopen( "life.in", "r", stdin );
freopen( "life.out", "w", stdout );
scanf( "%d", &n ), pwr[0] = 1;
rep ( i, 1, n ) {
scanf( "%d", &a[i] );
pwr[i] = add( pwr[i - 1], pwr[i - 1] );
}
f[n + 1][0][0] = 1;
per ( i, n + 2, 2 ) {
int all = n - i + 1, cur;
rep ( w, 0, 2 ) rep ( b, 0, 2 ) {
if ( !( cur = f[i][w][b] ) ) continue;
if ( !a[i - 1] ) {
addeq( f[i - 1][w][b], mul( cur, b ? pwr[all - 1] : 0 ) );
addeq( f[i - 1][( w & 1 ) + 1][b], mul( cur, pwr[all - !!b] ));
} else if ( ~a[i - 1] ) {
addeq( f[i - 1][w][b], mul( cur, w ? pwr[all - 1] : 0 ) );
addeq( f[i - 1][w][( b & 1 ) + 1], mul( cur, pwr[all - !!w] ));
} else {
addeq( f[i - 1][w][b], mul( cur, b ? pwr[all - 1] : 0 ) );
addeq( f[i - 1][w][b], mul( cur, w ? pwr[all - 1] : 0 ) );
addeq( f[i - 1][( w & 1 ) + 1][b], mul( cur, pwr[all - !!b] ));
addeq( f[i - 1][w][( b & 1 ) + 1], mul( cur, pwr[all - !!w] ));
}
}
}
int ans = 0;
rep ( w, 0, 2 ) rep ( b, 0, 2 ) {
if ( ( w + b ) & 1 ) {
addeq( ans, f[1][w][b] );
}
}
printf( "%d\n", ans );
return 0;
}
Solution -「FJWC 2020」人生的更多相关文章
- Solution -「ZJOI 2020」「洛谷 P6631」序列
\(\mathcal{Description}\) Link. 给定一个长为 \(n\) 的非负整数序列 \(\lang a_n\rang\),你可以进行如下操作: 取 \([l,r]\),将 ...
- Solution -「JOISC 2020」「UOJ #509」迷路的猫
\(\mathcal{Decription}\) Link. 这是一道通信题. 给定一个 \(n\) 个点 \(m\) 条边的连通无向图与两个限制 \(A,B\). 程序 Anthon ...
- Solution -「NOI 2020」「洛谷 P6776」超现实树
\(\mathcal{Description}\) Link. 对于非空二叉树 \(T\),定义 \(\operatorname{grow}(T)\) 为所有能通过若干次"替换 \( ...
- 「NOIP 2020」微信步数(计数)
「NOIP 2020」微信步数(Luogu P7116) 题意: 有一个 \(k\) 维场地,第 \(i\) 维宽为 \(w_i\),即第 \(i\) 维的合法坐标为 \(1, 2, \cdots, ...
- Solution -「ARC 104E」Random LIS
\(\mathcal{Description}\) Link. 给定整数序列 \(\{a_n\}\),对于整数序列 \(\{b_n\}\),\(b_i\) 在 \([1,a_i]\) 中等概率 ...
- Solution -「简单 DP」zxy 讲课记实
魔法题位面级乱杀. 「JOISC 2020 Day4」治疗计划 因为是不太聪明的 Joker,我就从头开始理思路了.中途也会说一些和 DP 算法本身有关的杂谈,给自己的冗长题解找借口. 首先,治疗方案 ...
- Solution -「SV 2020 Round I」SA
\(\mathcal{Description}\) 求出处 owo. 给定一个长度为 \(n\),仅包含小写字母的字符串 \(s\),问是否存在长度为 \(n\),仅包含小写字母的字符串 \( ...
- Solution -「SV 2020 Round I」「SRM 551 DIV1」「TC 12141」SweetFruits
\(\mathcal{Description}\) link. 给定 \(n\) 个水果,每个结点可能有甜度 \(v_i\),或不甜(\(v_i=-1\)).现在把这些水果串成一棵无根树.称一 ...
- Solution -「USACO 2020.12 P」Spaceship
\(\mathcal{Description}\) Link. Bessie 在一张含 \(n\) 个结点的有向图上遍历,站在某个结点上时,她必须按下自己手中 \(m\) 个按钮中处于激活状态 ...
随机推荐
- Xshell 6 首次连接虚拟机 CentOS 7.6报错:/usr/bin/xauth: file /root/.Xauthority does not exist
使用 Xshell 6 首次连接虚拟机 CentOS 7.6 出现这样的提示: /usr/bin/xauth: file /root/.Xauthority does not exist 解决: 只需 ...
- Jekyll + NexT + GitHub Pages 主题深度优化
前言 笔者在用 Jekyll 搭建个人博客时踩了很多的坑,最后发现了一款不错的主题 jekyll-theme-next,但网上关于 Jekyll 版的 Next 主题优化教程少之又少,于是就决定自己写 ...
- 园子的推广博文:欢迎收看 Apache Flink 技术峰会 FFA 2021 的视频回放
园子专属收看链接:https://developer.aliyun.com/special/ffa2021/live#?utm_content=g_1000316459 Flink Forward 是 ...
- 打开Cmd的方式与基础Dos命令
基础的Dos命令 打开Cmd的方式 开始->Windows系统->命令提示符 Win键 + R输入cmd打开控制台 在任意的文件夹下面,按住shift键+鼠标右键点击在此处打开powers ...
- SpringCloud之使用Zookeeper作为注册中心
SpringCloud之使用Zookeeper作为注册中心 linux安装zookeeper 安装zookeeper 关闭linux防火墙 启动zookeeper 1 创建项目导入依赖和配置文件 &l ...
- golang中的标准库fmt
fmp fmt.Fprintln.fmt.Fprintf fmt.Fprintln(os.Stdout, "向标准输出写入内容") // 0644: 拥有者6读写权限,组用户4读权 ...
- 大厂面试:一个四年多经验程序员的BAT面经(字节、阿里、腾讯)
前言 上次写了篇欢聚时代的面经,公众号后台有些读者反馈说看的意犹未尽,希望我尽快更新其他大厂的面经,这里先说声抱歉,不是我太懒,而是项目组刚好有个活动要赶在春节前上线,所以这几天经常加班,只能工作之余 ...
- el表达式中的${param}用法
el表达式中的${param}? 1. 2. ${param.name} 等价于 request.getParamter("name"),这两种方法一般用于服务器从页面或者客户端获 ...
- ApacheCN Vue 译文集 20211115 更新
使用 GraphQL 构建 VueJS 应用 零.前言 一.数据绑定.事件和计算属性 二.组件.混合器和功能组件 三.设置我们的聊天应用--AWS Amplify 环境和 GraphQL 四.创建自定 ...
- 出现 error: RPC failed; curl 18 transfer closed with outstanding read data remaining 的原因
最近在做全栈项目,前台后台,服务器端,三端在一个文件夹,当git clone 项目的时候就会出现:error: RPC failed; curl 18 transfer closed with out ...