UOJ Logo

NOI.AC

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#188424#3317. 行走(walk)ddh1231001767ms132676kbC++111.1kb2023-10-03 09:23:512023-10-03 12:48:44

answer

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define mod 998244353
int read(){
	int x=0,f=1;
	char ch=getchar();
	while(ch<'0'||ch>'9'){
		if(ch=='-')f=-1;
		ch=getchar();
	}
	while(ch>='0'&&ch<='9')
		x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
	return x*f;
}

int n,u,v,dp[200005][8],a[200005],ans;
char s[200005];
vector<int>E[200005];
void dfs(int u,int fa=0){
	dp[u][1<<a[u]]=1;
	vector<int>t[8];
	for(int i=0;i<8;i++)
		t[i].push_back(0);
	for(auto &&v:E[u]){
		if(v==fa)
			continue;
		dfs(v,u);
		for(int j=0;j<8;j++){
			dp[u][j|(1<<a[u])]+=dp[v][j];
			t[j].push_back(dp[v][j]);
		}
	}
	ans+=dp[u][7];
	for(int i=t[0].size()-2;i>=0;i--){
		for(int j=0;j<8;j++)t[j][i]+=t[j][i+1];
		for(int j=0;j<8;j++)for(int k=0;k<8;k++)
			if((j|k|(1<<a[u]))==7)ans+=(t[j][i]-t[j][i+1])*t[k][i+1];
	}
}
signed main(){
	n=read();
	scanf("%s",s+1);
	for(int i=1;s[i];i++)
		a[i]=s[i]-'a';
	for(int i=1;i<n;i++){
		u=read(),v=read();
		E[u].push_back(v);
		E[v].push_back(u);
	}
	dfs(1);
	printf("%lld",ans%mod);
	return 0;
}

详细

小提示:点击横条可展开更详细的信息

Test #1:

score: 10
Accepted
time: 5ms
memory: 6208kb

input:

2000
ababbcaaacccaabbaaacaabbbbcbcaaaacaaaaacaacbaaaaaaacbcaaacabbcaaacbbcbaabacbacbacbcbaacaacbbcab...

output:

1984050

result:

ok single line: '1984050'

Test #2:

score: 10
Accepted
time: 0ms
memory: 6204kb

input:

2000
accbccbcaacbabbbcbcccbacbccabbccccbccccaccccccbcaccabbcbbbcbccaaccbcccacabbaacbbcabccbaaccbabbb...

output:

1982714

result:

ok single line: '1982714'

Test #3:

score: 10
Accepted
time: 2ms
memory: 6200kb

input:

2000
cccacccbabaacaaacccbbbabcabacabbcbcabacbbaaccaabbcabbbaabbaaababbbabcbcabbccbabacbbcbbbbbbaccbb...

output:

1983256

result:

ok single line: '1983256'

Test #4:

score: 10
Accepted
time: 197ms
memory: 132676kb

input:

200000
aabaaccabcbbabacbcacbaaaccbbbacacacacabbbabcbaabbabcbbbcbbbacababababcaccabcaacbccbaabbbcccbb...

output:

34314841

result:

ok single line: '34314841'

Test #5:

score: 10
Accepted
time: 166ms
memory: 132672kb

input:

200000
bcaaabccbccbaaacabccaaacabcccbccabacbbbbccbacaacccacbaabcabccbcabcbaabaabababbbbcbacacbbaabba...

output:

34315707

result:

ok single line: '34315707'

Test #6:

score: 10
Accepted
time: 180ms
memory: 132676kb

input:

200000
babcaaccaabccbbccbbabcbaccbababbcaacbaccccccabacacbcccabbccbcccacaaabccbbbabbabbcccbaaabcaaaa...

output:

34309683

result:

ok single line: '34309683'

Test #7:

score: 10
Accepted
time: 322ms
memory: 28108kb

input:

200000
abbaaaabbabaabaaabbbaababbabaabaabababaabaababbaaaaababbabaabbabbbbbbbbbababbbaabaaabaabbbbab...

output:

199998

result:

ok single line: '199998'

Test #8:

score: 10
Accepted
time: 324ms
memory: 28012kb

input:

200000
babababbbbbbababaaabaaabaaababbbbabbaaaabaaaabbbbbbaaaaaabbabbabaabaabbaabbbbabbbaabbaababaab...

output:

799971

result:

ok single line: '799971'

Test #9:

score: 10
Accepted
time: 284ms
memory: 27912kb

input:

200000
aabccccabaabcbabcbaabbaccaaaccbcbbbbaccabbcaabbaababbbbacacbcccabcbbbccababccbccbccaaaabccacb...

output:

33543853

result:

ok single line: '33543853'

Test #10:

score: 10
Accepted
time: 287ms
memory: 28184kb

input:

200000
abaabbabacabaabaccbbabcbabbaababbbccabbaacacbcbbcbcacccabbbaccaaccaaaccbabbaabbcbcbaaaaabbbcb...

output:

33539915

result:

ok single line: '33539915'

Extra Test:

score: 0
Extra Test Passed