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

N ≤ 10^4

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

 #include<stdio.h>
#include<iostream>
#include<stdlib.h>
#include<math.h>
#include<algorithm>
#include<string>
#include<string.h>
#include<set>
#include<map>
#include<vector>
#include<time.h>
#define il inline
#define re register
using namespace std;
const int N=;
struct edge{int next,to;
} e[N];
int T,n,g[N][],M,m,d[N],x[N],y[N],exist[];
bool flag;
char p[N],q[N];
il void addedge(re int x,re int y){
e[++M]=(edge){g[x][p[y]-'a'],y};g[x][p[y]-'a']=M;
}
il bool dfs(re int h,re int fa,re int d){
//printf("%d %d %d\n",h,fa,d);
if(d==m){
return true;
}
for(re int i=g[h][q[d+]-'a'],k;i;i=e[i].next){
k=e[i].to;
if(k==fa) continue;
if(dfs(k,h,d+)) return true;
}
return false;
}
il bool dfs1(re int h,re int fa){
for(int j=;j<;j++){
for(int i=g[h][j];i;i=e[i].next){
if(e[i].to==fa) continue;
d[e[i].to]=d[h]+;
dfs1(e[i].to,h);
}
}
}
int main(){
freopen("alphabet.in","r",stdin);
freopen("alphabet.out","w",stdout);
scanf("%d",&T);
for(int it=;it<=T;it++){
memset(g,false,sizeof(g));
memset(exist,false,sizeof(exist));
scanf("%d",&n);M=;flag=true;
for(int i=;i<n;i++)
scanf("%d%d",&x[i],&y[i]);
scanf("%s%s",p+,q+);m=strlen(q+);
for(int i=;i<=n;i++)
exist[p[i]-'a']++;
for(int i=;i<=m;i++)
if(!exist[q[i]-'a']){
flag=false;break;
}
if(!flag){
printf("Case #%d: Impossible\n",it);continue;
}
int t1=,t2=;
for(int i=;i<=n;i++){
if(p[i]==q[]) t1++;
if(p[i]==q[m]) t2++;
}
for(int i=;i<n;i++){
addedge(x[i],y[i]);
addedge(y[i],x[i]);
}
d[]=;dfs1(,);
int sp=;
for(int i=;i<=n;i++)
if(d[i]>d[sp]) sp=i;
d[sp]=;dfs1(sp,);
for(int i=;i<=n;i++)
if(d[i]>d[sp]) sp=i;
if(d[sp]<m){
printf("Case #%d: Impossible\n",it);continue;
}
if(t2<t1) reverse(q+,q+m+);
for(int i=;i<=n;i++){
if(p[i]==q[]){
if(dfs(i,,)){
printf("Case #%d: Find\n",it);flag=false;break;
}
}
}
if(flag){
printf("Case #%d: Impossible\n",it);
}
// cout<<clock()<<endl;
}
return ;
}

常州day1p4的更多相关文章

  1. [日常训练]常州集训day8

    T1 Description 给定一个长度为$n$的正整数序列$a$.可以将序列分成若干段,定义第$i$段的权值$x_i$为这一段中所有数的最大值,特殊地,$x_0=0$.求$\sum_{i=1}^{ ...

  2. [日常训练]常州集训day7

    T1 Description 给定一个序列,初始为空.依次将$1-n$插入序列,其中$i$插到当前第$a_i$个数的右边($a_i=0$表示插到序列最左边).求最终序列. Input 第一行一个整数$ ...

  3. [日常训练]常州集训day5

    T1 Description 小$W$和小$M$一起玩拼图游戏啦~ 小$M$给小$M$一张$N$个点的图,有$M$条可选无向边,每条边有一个甜蜜值,小$W$要选$K$条边,使得任意两点间最多有一条路径 ...

  4. [日常训练]常州集训day3

    T1 Description 有$K$个石子,石子只能放在$N$条水平线与$M$条竖直线构成的网格的交点上. 求用$K$个石子最多能找到多少四边平行于坐标轴的长方形,它的四个角上都恰好放着一枚石子. ...

  5. [日常训练]常州集训day2

    T1 Description 给定$N$个点,问这$N$个点能构成的三角形个数. Input 第一行一个整数$N$,代表点数. 接下来$N$行,每行两个非负整数$X,Y$,表示一个点的坐标. Outp ...

  6. 常州Day4题解

    1. 高精度 这题略水,字符串可过,还不加压位等,操作只有BitShift和add/sub,不过编程复杂度有些高.(输出都是二进制我能说些什么...) 2. N皇后问题 (警告! 不是平时你见到的N皇 ...

  7. 常州培训 day5 解题报告

    第一题:(贪心) 题目大意:给出N*M的矩形,要用正方形将它铺满(正方形之间不能重叠),相邻的正方形颜色不能相同,颜色用ABCD表示.要求从上到下从左到右字典序最小. N,M<=100 解题过程 ...

  8. 常州培训 day7 解题报告

    最后一天..有些感慨,这七天被虐的感动万分 第一题: 题目大意: 求出 n*i(i=1,2,3....n) mod p的逆元  n<p<=3000000 ,p是质数. 之前写过了,懒得再写 ...

  9. 常州培训 day6 解题报告

    第一题: 题目大意: 给出一个N*N的矩阵,矩阵元素均为0或1.定义矩阵权值为sum(F[i][j]*F[j][i]); 给出K个操作: 询问矩阵的权值mod 2. 将矩阵的某一行元素取反(0变成1, ...

随机推荐

  1. 存一下emacs配置

    (global-set-key [f9] 'compile-file)(global-set-key [f10] 'gud-gdb)(global-set-key (kbd "C-z&quo ...

  2. 《Node.js 包教不包会》

    <Node.js 包教不包会> 为何写作此课程 在 CNode(https://cnodejs.org/) 混了那么久,解答了不少 Node.js 初学者们的问题.回头想想,那些问题所需要 ...

  3. 4星|《财经》2018年第15期:电动飞机、无人小飞机、AI无人机

    <财经>2018年第15期 总第532期 旬刊 本期主题是AI.有多篇国内AI行业的比较深入的调查报告,比较有意思的有:电动飞机.无人小飞机.AI无人机.欧盟通用数据保护条例.Amazon ...

  4. 算法与AI的暗黑面:3星|《算法的陷阱:超级平台、算法垄断与场景欺骗》

    算法的陷阱:超级平台.算法垄断与场景欺骗 全书讲算法与AI的暗黑面:价格歧视.导致算法军备竞赛.导致商家降价冲动降低.平台作恶(向劣质商家收费导致品质下降.与开发商一起分析用户隐私)等. 作者从商业. ...

  5. centos7.2部署docker-17.06.0-ce的bug:Error response from daemon: oci runtime error: container_linux.go:262: starting container process caused "process_linux.go:339: container init caused \"\"".

    现象: 操作系统:centos 7.2 kernel 3.10.0-327.el7.x86_64 mesos:1.3.0 docker:docker-17.06.0-ce 在做mesos验证时,通过m ...

  6. PHP开发中常见的漏洞及防范

    PHP开发中常见的漏洞及防范 对于PHP的漏洞,目前常见的漏洞有五种.分别是Session文件漏洞.SQL注入漏洞.脚本命令执行漏洞.全局变量漏洞和文件漏洞.这里分别对这些漏洞进行简要的介绍和防范. ...

  7. resx文件引用

    应用场景: 自己在编写双语界面的时候,用到两种语言表. 引用如下: LocRM = new ResourceManager("TMI_E.words_" + lang.ToLowe ...

  8. Java微笔记(9)

    使用 Date 和 SimpleDateFormat 类表示时间 处理日期和时间的相关数据,可以使用 java.util 包中的 Date 类 使用 Date 类的默认无参构造方法创建出的对象就代表当 ...

  9. Alpha-7

    前言 失心疯病源7 团队代码管理github 站立会议 队名:PMS 530雨勤(组长) 今天完成了那些任务 18:30~20:30 通过统计法来得出人车团块的区别和鉴别方法,然而效果并不显著 代码签 ...

  10. Windows Forms编程实战学习:第一章 初识Windows Forms

    初识Windows Forms 1,用C#编程 using System.Windows.Forms;   [assembly: System.Reflection.AssemblyVersion(& ...