nowcoder wannafly挑战赛22 B

题目大意:

给出一个DAG,每条边(可能有重边)上有一个字符(大写字母、小写字母、空格或句号),要求求出满足去掉所有空格后路径以大写字母开头、句号结尾、中间仅有小写字母(可以为0个)组成的路径条数。

题解:

自己想了一个比较难以实现的办法。

看了一下其他人的简单代码,发现新大陆。

思路都一样,但是实现太巧妙了。

开三个数组f[i]、g[i]、p[i]分别表示以i点开头的答案数、全部为空格的路径数、以句号结尾的路径数。

显然遇到大写字母的边的时候,设边终点为u,f[i]可以加上p[u],遇到小写字母时,p[i]=p[i]+p[u],遇到空格时,则f、g、p都可以转移,遇到句号时,p[i]=p[i]+g[u]。

用dfs实现。

实在是太妙了。

猜你喜欢

转载自www.cnblogs.com/lmlysklt/p/9637828.html