传送门

解题思路

  感觉这种题都是套路,首先缩点判了环(没看见自环挂了一次。。),然后设\(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;
}

最新文章

  1. webSphere内存溢出
  2. [转载]再来重新认识JavaEE完整体系架构
  3. Google V8编程详解(四)Context
  4. 一个java页游服务器框架
  5. Beta版本冲刺———第一天
  6. ArcGIS Server 10.1 for Linux典型问题总结
  7. 基于Spring的可扩展Schema进行开发自定义配置标签支持
  8. HTML5 的 applicationCache 应用程序缓存离线存储功能与 manifest 文件
  9. sql server Convert 的函数的用法 转换成浮点数
  10. C# Best Practices - Define Fields Appropriately
  11. hdu 1240 Asteroids!(BFS)
  12. pragma once与#ifndef的作用有什么区别
  13. panda库------对数据进行操作---合并,转换,拼接
  14. scrapy分布式的几个重点问题
  15. MYSQL手册
  16. CF1101F Trucks and Cities
  17. 批量 kill mysql 线程
  18. springboot 多环境配置yml或properties
  19. [LeetCode] 42. Trapping Rain Water_hard tag: Two Pointers
  20. linux下补丁制作及打补丁实例【转】

热门文章

  1. etc/profile /etc/bashrc ~/.bash_profile ~/.bashrc等配置文件区别
  2. python的magic methods
  3. 【单调队列优化】[CF372C] Watching Fireworks is Fun
  4. Effective C++之条款2:尽量以const enum inline替换 #define
  5. [转]Netty入门(最简单的Netty客户端/服务器程序)
  6. leetcode-两个数组交集(包含重复元素)
  7. redis集群报错:(error) MOVED 5798 127.0.0.1:7001
  8. Jmeter-【beanshell处理器】-随机获取手机号
  9. CSS盒模型及应用
  10. 判断访问浏览器客户端类型(pc,mac,ipad,iphone,android)