常州day1p4
给定一棵 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的更多相关文章
- [日常训练]常州集训day8
T1 Description 给定一个长度为$n$的正整数序列$a$.可以将序列分成若干段,定义第$i$段的权值$x_i$为这一段中所有数的最大值,特殊地,$x_0=0$.求$\sum_{i=1}^{ ...
- [日常训练]常州集训day7
T1 Description 给定一个序列,初始为空.依次将$1-n$插入序列,其中$i$插到当前第$a_i$个数的右边($a_i=0$表示插到序列最左边).求最终序列. Input 第一行一个整数$ ...
- [日常训练]常州集训day5
T1 Description 小$W$和小$M$一起玩拼图游戏啦~ 小$M$给小$M$一张$N$个点的图,有$M$条可选无向边,每条边有一个甜蜜值,小$W$要选$K$条边,使得任意两点间最多有一条路径 ...
- [日常训练]常州集训day3
T1 Description 有$K$个石子,石子只能放在$N$条水平线与$M$条竖直线构成的网格的交点上. 求用$K$个石子最多能找到多少四边平行于坐标轴的长方形,它的四个角上都恰好放着一枚石子. ...
- [日常训练]常州集训day2
T1 Description 给定$N$个点,问这$N$个点能构成的三角形个数. Input 第一行一个整数$N$,代表点数. 接下来$N$行,每行两个非负整数$X,Y$,表示一个点的坐标. Outp ...
- 常州Day4题解
1. 高精度 这题略水,字符串可过,还不加压位等,操作只有BitShift和add/sub,不过编程复杂度有些高.(输出都是二进制我能说些什么...) 2. N皇后问题 (警告! 不是平时你见到的N皇 ...
- 常州培训 day5 解题报告
第一题:(贪心) 题目大意:给出N*M的矩形,要用正方形将它铺满(正方形之间不能重叠),相邻的正方形颜色不能相同,颜色用ABCD表示.要求从上到下从左到右字典序最小. N,M<=100 解题过程 ...
- 常州培训 day7 解题报告
最后一天..有些感慨,这七天被虐的感动万分 第一题: 题目大意: 求出 n*i(i=1,2,3....n) mod p的逆元 n<p<=3000000 ,p是质数. 之前写过了,懒得再写 ...
- 常州培训 day6 解题报告
第一题: 题目大意: 给出一个N*N的矩阵,矩阵元素均为0或1.定义矩阵权值为sum(F[i][j]*F[j][i]); 给出K个操作: 询问矩阵的权值mod 2. 将矩阵的某一行元素取反(0变成1, ...
随机推荐
- TMS320VC5509驱动LCD1602
1. 本次使用5509芯片的EMIF接口,先看下硬件的接口 LCD1602接口 RS(高电平1数据寄存器,低电平0指令寄存器) 接A2接口 LCD1602接口 RW(高电平读,低电平写) 接 AW ...
- DSP5509的USB协议开发
1. 使用的板子 2. 原理图相关,这个1.5K的上拉电阻,全速和高速上拉在D+,低速上拉在D- 3. 中断处理函数没有搞明白是什么意思?这个工程我怎么基本看不懂? interrupt void US ...
- BZOJ3174. [TJOI2013]拯救小矮人(dp)
题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id=3174 题解 其实此题并不需要那么多YY的部分. 我们考虑若干个小矮人逃出的顺序.若跳出的 ...
- 安装centos minimal 版本后安装setup包(linux)
网络配置好后,输入命令 yum install setuptool,安装过程有两个确认,输入Y即可
- katalon系列十三:5.10新增跳过用例&命令行赋值全局变量
Katalon Studio升级到5.10版本了,这次新增了2个很实用的功能:一.跳过用例在Listener中新增了跳过用例方法,Listener类似于JUnit4的annotation中的@Befo ...
- HTTP结构讲解——《HTTP权威指南》系列
HTTP结构 第二部分的5章主要介绍了HTTP服务器,代理,缓存,网关和机器人应用程序,这些都是Web系统架构的构造模块. Web服务器 第五章 Web服务器会对HTTP请求进行处理并提供响应.术语& ...
- 《算法图解》——第十章 K最近邻算法
第十章 K最近邻算法 1 K最近邻(k-nearest neighbours,KNN)——水果分类 2 创建推荐系统 利用相似的用户相距较近,但如何确定两位用户的相似程度呢? ①特征抽取 对水果 ...
- openstack-r版(rocky)搭建基于centos7.4 的openstack swift对象存储服务 一
openstack-r版(rocky)搭建基于centos7.4 的openstack swift对象存储服务 一 openstack-r版(rocky)搭建基于centos7.4 的openstac ...
- Python基础灬dict&set
字典dict 字典使用键-值(key-value)存储,具有极快的查找速度. dict基本操作 取值 a_dict = {'name': 'jack', 'age': 18} print(a_dict ...
- Wacom将在CES 2015上发布全新旗舰版Cintiq
Cintiq 27QHD和Cintiq 27QHD touch拥有宽大的工作表面,以及令人惊喜的屏幕笔触和颜色性能. 2015年1月6日,Wacom发布了Cintiq 27QHD和Cintiq 27Q ...