博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
常州day1p4
阅读量:7118 次
发布时间:2019-06-28

本文共 1502 字,大约阅读时间需要 5 分钟。

给定一棵 n 个点的树,树上每个节点代表一个小写字母,询问一个字符串 S 是否在树上出现过? 字符串 S 出现过即表示存在两个点 u,v,u 到 v 的最短路径上依次连接所有点上的字母恰好是 S 

N ≤ 10^4

直接寻找即可,注意特殊情况,加一个小优化优化非常多。

1 #include
2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 #include
9 #include
10 #include
11 #include
12 #define il inline13 #define re register14 using namespace std;15 const int N=20001;16 struct edge{ int next,to;17 } e[N];18 int T,n,g[N][26],M,m,d[N],x[N],y[N],exist[101];19 bool flag;20 char p[N],q[N];21 il void addedge(re int x,re int y){22 e[++M]=(edge){g[x][p[y]-'a'],y};g[x][p[y]-'a']=M;23 }24 il bool dfs(re int h,re int fa,re int d){25 //printf("%d %d %d\n",h,fa,d);26 if(d==m){27 return true;28 }29 for(re int i=g[h][q[d+1]-'a'],k;i;i=e[i].next){30 k=e[i].to;31 if(k==fa) continue;32 if(dfs(k,h,d+1)) return true;33 }34 return false;35 }36 il bool dfs1(re int h,re int fa){37 for(int j=0;j<26;j++){38 for(int i=g[h][j];i;i=e[i].next){39 if(e[i].to==fa) continue;40 d[e[i].to]=d[h]+1;41 dfs1(e[i].to,h);42 }43 }44 }45 int main(){46 freopen("alphabet.in","r",stdin);47 freopen("alphabet.out","w",stdout);48 scanf("%d",&T);49 for(int it=1;it<=T;it++){50 memset(g,false,sizeof(g));51 memset(exist,false,sizeof(exist));52 scanf("%d",&n);M=0;flag=true;53 for(int i=1;i
d[sp]) sp=i;78 d[sp]=1;dfs1(sp,0);79 for(int i=1;i<=n;i++)80 if(d[i]>d[sp]) sp=i;81 if(d[sp]

 

转载于:https://www.cnblogs.com/ExiledPoet/p/5771106.html

你可能感兴趣的文章
PostFix邮件网关无法向公网投递邮件问题分析
查看>>
可替代的C语言开发环境
查看>>
无任何网络提供程序接受指定的网络路径解决方法
查看>>
XenDesktop 5之痛---Database Transaction Log速增
查看>>
DB2计划三招“破甲” IBM在华能否得偿所愿
查看>>
高可用集群原理概念详述
查看>>
mount NTFS harddisk on slackware ver13.37
查看>>
Liferay Dynamic CSS Filter方法的研究 - 总体过程
查看>>
看完性能简报,想不优化好都难!
查看>>
Qt学习之路(4):初探信号槽
查看>>
CSS伪类的又一个小应用,实现下拉菜单
查看>>
Python协程深入理解
查看>>
Ubuntu 11.10搭建和配置Nagios
查看>>
百度运维部电子竞技大赛!
查看>>
Linux下清空回收站
查看>>
XenMotion 与HA的区别
查看>>
修改Sql Server 2000数据库名称
查看>>
PHP问题 —— Notice: Undefined index:
查看>>
专业的优化服务,就是为你争取时间!
查看>>
solr安装配置
查看>>