传送门

解题思路

  感觉这种题都是套路,首先缩点判了环(没看见自环挂了一次。。),然后设\(f[x][i]\)表示到了\(x\),\(i\)这个字母走过的最长距离,然后拓扑排序更新即可。

代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<queue>using namespace std;
const int MAXN = 300005;inline int rd(){int x=0,f=1;char ch=getchar();while(!isdigit(ch)) {f=ch=='-'?0:1;ch=getchar();}while(isdigit(ch))  {x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}return f?x:-x;
} int n,m,head[MAXN],cnt,dfn[MAXN],low[MAXN],num,w[MAXN],ans;
int to[MAXN],nxt[MAXN],f[MAXN][30],stk[MAXN],top,deg[MAXN];
bool vis[MAXN],flag;
char s[MAXN];
queue<int> Q;inline void add(int bg,int ed){to[++cnt]=ed,nxt[cnt]=head[bg],head[bg]=cnt;
}void tarjan(int x){dfn[x]=low[x]=++num;stk[++top]=x;vis[x]=1;for(register int i=head[x];i;i=nxt[i]){int u=to[i];if(!dfn[u]) {tarjan(u);low[x]=min(low[x],low[u]);}else if(vis[u]) low[x]=min(low[x],dfn[u]);}if(low[x]==dfn[x]) {if(stk[top]!=x) {flag=1;return;}top--;vis[x]=0;}
}int main(){n=rd(),m=rd();int x,y;scanf("%s",s+1);for(int i=1;i<=n;i++) w[i]=s[i]-'a'+1;for(int i=1;i<=m;i++){x=rd(),y=rd();deg[y]++;if(x==y) flag=1;add(x,y);}for(int i=1;i<=n;i++) if(!dfn[i]) tarjan(i);if(flag) {puts("-1");return 0;}else{for(int i=1;i<=n;i++) if(!deg[i]) Q.push(i),f[i][w[i]]=1;while(Q.size()){int x=Q.front();Q.pop();for(register int i=head[x];i;i=nxt[i]){int u=to[i];f[u][w[u]]=max(f[u][w[u]],f[x][w[u]]+1);for(int k=1;k<=26;k++) if(w[u]!=k) f[u][k]=max(f[u][k],f[x][k]);deg[u]--;if(!deg[u]) Q.push(u);}if(!head[x]) for(int i=1;i<=26;i++) ans=max(ans,f[x][i]);}}printf("%d\n",ans);return 0;
}

转载于:https://www.cnblogs.com/sdfzsyq/p/9866431.html

CF919D Substring (dag dp)相关推荐

  1. Codeforces 919D Substring (拓扑图DP)

    Codeforces 919D Substring (拓扑图DP) 手动博客搬家: 本文发表于20180716 10:53:12, 原地址https://blog.csdn.net/suncongbo ...

  2. 根据UI设计图得到android所需要的dp

    UI设计图一般是根据苹果6尺寸来标注的px值,由于做屏幕适配,我们需要将px转为dp dp=px/density density是设备密度 android系统自带有获取设备密度 context.get ...

  3. 安卓UI图px标注适配攻略:批量转化px为dp

    转自http://blog.csdn.net/zengd0/article/details/52464627 一款优秀app的产生,往往需要有一套精美华丽的UI设计图,诚然,UI仅仅只是个开始,有追求 ...

  4. android 关于px转化为dp,sp

    一款优秀app的产生,往往需要有一套精美华丽的UI设计图,诚然,UI仅仅只是个开始,有追求极致的前端工程师开发软件时尽可能地去贴近UI的设计才是重中之重. 我们知道,Android的尺寸单位一般采用d ...

  5. Codeforces Round #501 (Div. 3)【未完结】

    2022.3.7 题单地址:https://codeforces.com/contest/1015 目录 A. Points in Segments B. Obtaining the String[模 ...

  6. 动态规划经典题:给出两个字符串s1和s2,返回其中最大的公共子串

    求公共子字符串问题(连续的) 这个题目是当时远景能源公司现场笔试的一道题目,当时根本就不知道动态规划是什么鬼,直接上来就暴力求解,面试官很谄媚的问我,你这能求出来吗?当时很年轻的说,能啊!现在想,当时 ...

  7. 2017 ACM ICPC Asia Regional - Daejeon

    2017 ACM ICPC Asia Regional - Daejeon Problem A Broadcast Stations 题目描述:给出一棵树,每一个点有一个辐射距离\(p_i\)(待确定 ...

  8. 零代码技能平台技术实践探索

    导读:今天为大家介绍一下OPPO小布助手在对话系统技能平台建设中的落地实践,主要分为四个方面: 业务领域建模,建设通用能力地图 语义理解能力初探,多类型的场景支持 多模式易扩展流程化的对话管理 端到端 ...

  9. CF338(div2)

    A. Bulbs 题目描述: 就是有m盏灯,有n个开关,一开始灯都是关的,然后按下一个开关后就会使某些灯打开,然后打开的灯不会再次熄灭.问能否是所有的灯打开. 解答: 简单的遍历一下,然后看是否存在有 ...

最新文章

  1. 递归遍历所有文件夹名称
  2. CCNA题库关于Frame-relay看图答题的解答
  3. 汇编语言——《分支与循环程序设计》实验报告
  4. WAP端 touch事件触发顺序记录
  5. 计算机并口优点,并口光驱优缺点有哪些 并口光驱如何转串口
  6. 普中51单片机数码管实例
  7. 爬虫第二弹:千图网电商淘宝模板图片下载
  8. 直播平台开发过程中关于谷歌fcm推送介绍
  9. C++中的运算符和运算符优先级总结
  10. 2018/5/25-2018/6/7
  11. Java提取URL某个参数的值
  12. 阿里云2023届实习生招聘启动啦,快来加入IoT安全吧
  13. Adversarial Semantic Hallucination for Domain Generalized Semantic Segmentation
  14. 在Java中12个常见的语法糖!
  15. 荨麻疹会遗传给下一代吗?怎么改善,就这么简单
  16. Tinkoff Internship Warmup Round 2018 and Codeforces Round #475 (Div. 2) C.Alternating Sum(等比数列求和)
  17. Android 自定义Switch样式
  18. 诺基亚:成也塞班 败也塞班
  19. 【观察】生态赋能与聚链共赢背后,解读 SAP 产业集群策略新价值
  20. sql中时间以5分钟,半个小时,任意间隔分组

热门文章

  1. vue 嵌套表格组件_vue+element中表格嵌套怎么做?
  2. 线程的生命周期_[线程设计]通过观察者模式监控线程生命周期
  3. python组件的react实现_React-Router动态路由设计最佳实践
  4. mysql的in查询是可以用到索引吗?亲测详解
  5. oracle查看控件文件 tns
  6. 解决The server cannot be started because one or more of the ports are invalid.
  7. Unet实现图像分割(二)
  8. HDU 2037 今年暑假不AC【贪心】
  9. python连接mongo_Python连接MongoDB操作
  10. node 使用 download-git-repo 下载 github 代码