http://codeforces.com/gym/100962/attachments

题意:有一个n个节点的字母树,给出n-1条边的信息,代表边上有一个字母,然后给出长度为m的字符串,问是否能在这棵树上找到这样一个序列等于这条字符串,输出序列的起点和终点。

思路:用DP数组维护当到达该结点的时候,左边最长的长度是多少和达到这个长度的左端点,右边最长的长度是多少和达到这个长度的右端点。详细看代码,很容易懂。

 #include <bits/stdc++.h>
using namespace std;
#define N 500010
struct Edge {
int v, nxt; char c;
} edge[N*];
struct node {
int l, r, ansl, ansr;
} dp[N]; // l是保存头,r是保存尾的信息
int tot, head[N], n, m, ansu, ansv;
char s[N]; void Add(int u, int v, char c) {
edge[tot] = (Edge) {v, head[u], c}; head[u] = tot++;
edge[tot] = (Edge) {u, head[v], c}; head[v] = tot++;
} bool dfs(int u, int fa) {
for(int i = head[u]; ~i; i = edge[i].nxt) {
int v = edge[i].v; char c = edge[i].c;
if(v == fa) continue;
if(dfs(v, u)) return true; // 已经有答案了
int ltmp = dp[v].l;
int rtmp = dp[v].r;
if(c == s[dp[v].l]) ltmp++; // 如果当前的边是左边的下一个字符
if(c == s[m - dp[v].r - ]) rtmp++; // 如果当前的边是右边的下一个字符
if(ltmp + dp[u].r >= m) { // 有答案了
ansu = dp[v].ansl, ansv = dp[u].ansr;
return true;
}
if(dp[u].l + rtmp >= m) {
ansu = dp[u].ansl, ansv = dp[v].ansr;
return true;
}
if(ltmp > dp[u].l) { // 如果长度变长就更新
dp[u].ansl = dp[v].ansl;
dp[u].l = ltmp;
}
if(rtmp > dp[u].r) {
dp[u].ansr = dp[v].ansr;
dp[u].r = rtmp;
}
}
return false;
} int main() {
scanf("%d%d", &n, &m);
tot = ; memset(head, -, sizeof(head));
for(int i = ; i < n; i++) {
int u, v; char c;
cin >> u >> v >> c;
Add(u, v, c);
dp[i].l = dp[i].r = ; // 点的信息
dp[i].ansl = dp[i].ansr = i; // 端点答案的信息
}
dp[n].l = dp[n].r = ;
dp[n].ansl = dp[n].ansr = n;
cin >> s;
ansu = ansv = -;
dfs(, -);
printf("%d %d\n", ansu, ansv);
return ;
}

Codeforces Gym100962J:Jimi Hendrix(树型DP)的更多相关文章

  1. Codeforces 23E Tree(树型DP)

    题目链接 Tree $dp[x][i]$表示以x为根的子树中x所属的连通快大小为i的时候 答案最大值 用$dp[x][j]$ * $dp[y][k]$ 来更新$dp[x][j + k]$. (听高手说 ...

  2. Codeforces 581F Zublicanes and Mumocrates(树型DP)

    题目链接  Round 322 Problem F 题意  给定一棵树,保证叶子结点个数为$2$(也就是度数为$1$的结点),现在要把所有的点染色(黑或白) 要求一半叶子结点的颜色为白,一半叶子结点的 ...

  3. Codeforces 149D Coloring Brackets(树型DP)

    题目链接 Coloring Brackets 考虑树型DP.(我参考了Q巨的代码还是略不理解……) 首先在序列的最外面加一对括号.预处理出DFS树. 每个点有9中状态.假设0位不涂色,1为涂红色,2为 ...

  4. 【题解】codeforces 219D Choosing Capital for Treeland 树型dp

    题目描述 Treeland国有n个城市,这n个城市连成了一颗树,有n-1条道路连接了所有城市.每条道路只能单向通行.现在政府需要决定选择哪个城市为首都.假如城市i成为了首都,那么为了使首都能到达任意一 ...

  5. POJ3659 Cell Phone Network(树上最小支配集:树型DP)

    题目求一棵树的最小支配数. 支配集,即把图的点分成两个集合,所有非支配集内的点都和支配集内的某一点相邻. 听说即使是二分图,最小支配集的求解也是还没多项式算法的.而树上求最小支配集树型DP就OK了. ...

  6. POJ 3342 - Party at Hali-Bula 树型DP+最优解唯一性判断

    好久没写树型dp了...以前都是先找到叶子节点.用队列维护来做的...这次学着vector动态数组+DFS回朔的方法..感觉思路更加的清晰... 关于题目的第一问...能邀请到的最多人数..so ea ...

  7. 【XSY1905】【XSY2761】新访问计划 二分 树型DP

    题目描述 给你一棵树,你要从\(1\)号点出发,经过这棵树的每条边至少一次,最后回到\(1\)号点,经过一条边要花费\(w_i\)的时间. 你还可以乘车,从一个点取另一个点,需要花费\(c\)的时间. ...

  8. 洛谷P3354 Riv河流 [IOI2005] 树型dp

    正解:树型dp 解题报告: 传送门! 简要题意:有棵树,每个节点有个权值w,要求选k个节点,最大化∑dis*w,其中如果某个节点到根的路径上选了别的节点,dis指的是到达那个节点的距离 首先这个一看就 ...

  9. 【POJ 3140】 Contestants Division(树型dp)

    id=3140">[POJ 3140] Contestants Division(树型dp) Time Limit: 2000MS   Memory Limit: 65536K Tot ...

  10. ZOJ 3949 (17th 浙大校赛 B题,树型DP)

    题目链接  The 17th Zhejiang University Programming Contest Problem B 题意  给定一棵树,现在要加一条连接$1$(根结点)和$x$的边,求加 ...

随机推荐

  1. Dijkstra含权图最短路径;审判,不要错过枚举退款保证不会重复;国际象棋八皇后问题

    求两节点的最短通路.对于无权图,能够通过图的广度优先遍历求解.含权图一般通过Dijkstra算法求解. import java.util.ArrayList; import java.util.Has ...

  2. 将RDL报表转换成RDLC报表的函数

    原文:将RDL报表转换成RDLC报表的函数 近日研究RDLC报表,发现其不能与RDL报表兼容,尤其是将RDL报表转换成RDLC报表.网上的资料贴出的的转换方式复杂且不切实际,遂决定深入研究.经研究发现 ...

  3. 那些证书相关的玩意儿(SSL,X.509,PEM,DER,CRT,CER,KEY,CSR,P12等)(使用OpenSSL的命令行)

    之前没接触过证书加密的话,对证书相关的这些概念真是感觉挺棘手的,因为一下子来了一大堆新名词,看起来像是另一个领域的东西,而不是我们所熟悉的编程领域的那些东西,起码我个人感觉如此,且很长时间都没怎么搞懂 ...

  4. 【全面解禁!真正的Expression Blend实战开发技巧】十一章 全面解析布局(Grid & Canvas &StackPanel &Wrappanel)

    原文:[全面解禁!真正的Expression Blend实战开发技巧]十一章 全面解析布局(Grid & Canvas &StackPanel &Wrappanel) 写这篇文 ...

  5. Win8 Metro(C#)数字图像处理--2.44图像油画效果算法

    原文:Win8 Metro(C#)数字图像处理--2.44图像油画效果算法  [函数名称]   图像油画效果      OilpaintingProcess(WriteableBitmap src ...

  6. 【Repo】推送一个已有的代码到新的 gerrit 服务器

    1.指定项目代码库中迭代列出全部ProductList(.git)到pro.log文件中 repo forall -c 'echo $REPO_PROJECT' | tee pro.log 命令解读: ...

  7. Win10《芒果TV》送7天免费会员,邀您抢先看萌心自制《妈妈是超人3》

    <妈妈是超人>第三季萌心归来,霍思燕,贾静雯,黄圣依,邓莎联合释放"妈妈的声音",嗯哼,咘咘,波妞,安迪,大麟子五位萌娃共同出镜,萌化屏幕.Win10<芒果TV& ...

  8. Win10《芒果TV》更新v3.4.10春光版:优化弹窗体验,修复热键和推送

    春来触地故乡情,忽见风光忆两京,金谷踏花香骑入,曲江碾草钿车行,Win10版<芒果TV>更新v3.4.10,进一步优化弹窗体验,修复热键和推送异常. Win10版<芒果TV>V ...

  9. Android零基础入门第71节:CardView简单实现卡片式布局

    还记得我们一共学过了多少UI控件了吗?都掌握的怎么样啊. 安卓中一些常用控件学习得差不多了,今天再来学习一个新的控件CardView,在实际开发中也有非常高的地位. 一.CardView简介 Card ...

  10. MSYS2开发环境搭建(无幻的博客,编译OpenSSL,可使用pacman升级)

    MSYS2开发环境搭建 软件安装 下载msys2-x86_64软件包,双击安装到某根目录下,比如D:\msys64. pacman是MSYS2自带的软件管理工具: 可通过修改msys64\etc\pa ...