ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

LOJ6497「雅礼集训 2018 Day1」图

2021-10-08 20:32:00  阅读:156  来源: 互联网

标签:个点 奇数 int 路径 long Day1 雅礼 LOJ6497 mod


https://loj.ac/p/6497

考虑暴力,设 \(f(i,k,x,y)\) 表示考虑到第 \(i\) 个点,目前有 偶数/奇数 条路径,已经有 \(x\) 个定为黑色的点有奇数条路径结尾,有 \(y\) 个定为白色的点有奇数条路径结尾,的答案
那么转移的话,枚举当前点颜色,以白色为例

  • 若 \(y=0\),则无论前 \(i\) 个点如何向 \(i+1\) 连,本来白色的无法多形成路径,本来黑色的没有,那么只有一条新增路径是 \(i+1\) 一个单点有 \(2^i f(i,k,x,0)\rightarrow f(i+1,k\operatorname{xor} 1,x,0)\)
  • 若 \(y\neq 0\),白色可以随便连就是 \(2^x\),枚举新增路径是奇是偶,由于 \(i+1\) 一个单点这个路径一定存在,就分别对应向黑色的 \(y\) 个点中的 偶数/奇数 个点连边
  • 但发现这样 \(f(i,k,x,y)\) 乘的系数都是 \(2^{i-1}\),所以 \(x,y\) 都只要记录为 \(0\) 或 \(1\) 即可,于是就有了 \(O(n)\) 做法

黑色同理


#define mod 998244353
#define N 200006
int n;
long long f[N][2][2][2],power[N];//f[i][k][x][y] k: even/odd x: white y: black
inline void add(long long &x,long long y){x=(x+y>=mod)?(x+y-mod):(x+y);}
int main(){
	n=read();int need=read();
	power[0]=1;
	for(int i=1;i<=n;i++) power[i]=power[i-1]*2%mod;
	int a=read();
	if(a!=1) f[1][1][1][0]=1;//white
	if(a!=0) f[1][1][0][1]=1;//black
	for(int i=1;i<n;i++){
		a=read();
		for(int k=0;k<2;k++)for(int x=0;x<2;x++)for(int y=0;y<2;y++)if(f[i][k][x][y]){
			long long now=f[i][k][x][y];
			if(a!=1){//i+1: white
				if(!y) add(f[i+1][k^1][1][y],now*power[i]%mod);
				else{
					add(f[i+1][k][x][y],now*power[i-1]%mod);add(f[i+1][k^1][1][y],now*power[i-1]%mod);
				}
			}
			if(a!=0){//i+1: black
				if(!x) add(f[i+1][k^1][x][1],now*power[i]%mod);
				else{
					add(f[i+1][k][x][y],now*power[i-1]%mod);add(f[i+1][k^1][x][1],now*power[i-1]%mod);
				}
			}
		}
	}
	long long ans=0;
	for(int x=0;x<2;x++)for(int y=0;y<2;y++) add(ans,f[n][need][x][y]);
	printf("%lld\n",ans);
	return 0;
}

标签:个点,奇数,int,路径,long,Day1,雅礼,LOJ6497,mod
来源: https://www.cnblogs.com/suxxsfe/p/15382715.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有