题意:将一个字符串上的n个字符视作点,给出m条有向边,求图中路径上最长出现的相同字母数。

分析:首先如果这张图中有环,则可以取无限大的字符数,在求拓扑排序的同时可以确定是否存在环。

之后在拓扑排序的结果上分别对26个字母dp求出最大结果,并取最大值(一定要分别对每个字母dp,否则会出现问题)。

#include<bits/stdc++.h>
using namespace std;
const int maxn =3e5+;
int N,M;
vector<int> G[maxn];
vector<int> topo;
int indeg[maxn];
int dp[maxn][];
char str[maxn]; void init()
{
topo.clear();
memset(indeg,,sizeof(indeg));
for(int i=;i<=N;++i) G[i].clear();
} bool circle()
{
int v,u,cnt=;
queue<int> Q;
for(int i=;i<=N;++i){
if(!indeg[i]){
Q.push(i);
cnt++;
}
}
while(!Q.empty()){
v= Q.front(); Q.pop();
topo.push_back(v);
for(int i=;i<G[v].size();++i){
u =G[v][i];
indeg[u]--;
if(!indeg[u]){
Q.push(u);
cnt++;
}
}
}
if(cnt==N) return false;
else return true;
} int solve(int key)
{
memset(dp,,sizeof(dp));
int res=;
int e,v,u;
for(int i =;i<topo.size();++i){
v =topo[i];
e = str[v]-'a';
if(e==key)
dp[v][e]++;
res = max(res,dp[v][key]);
for(int j = ;j<G[v].size();++j){
u = G[v][j];
dp[u][key]= max(dp[u][key],dp[v][key]);
}
}
return res;
} int main()
{
int v,u;
while(~scanf("%d%d",&N,&M)){
init();
scanf("%s",str+);
for(int i=;i<M;++i){
scanf("%d%d",&v,&u);
G[v].push_back(u);
indeg[u]++;
}
if(circle()){
printf("-1\n");
continue;
}
int res=;
for(int i=;i<;++i){
res=max(res,solve(i));
}
printf("%d\n",res);
}
return ;
}

最新文章

  1. centos tar压缩与解压缩命令大全
  2. 完美解决 Linux 下 Sublime Text 中文输入
  3. Myeclipse 加载ojdbc14.jar步骤
  4. iOS应用架构谈(二):View层的组织和调用方案(中)
  5. atexit函数和两种特殊文件权限位
  6. 【转】并发编程之GCD
  7. python脚本工具-1 制作爬虫下载网页图片
  8. JavaScript- The Good Parts Chapter 5 Inheritance
  9. 白帽子讲Web安全1.pdf
  10. hdu 1317 XYZZY【Bellheman_ford 判断正环小应用】
  11. C语言刷新缓冲区(转载)
  12. python 标准模块shlex
  13. 学会C sharp计算机编程语言 轻松开发财务、统计软件
  14. linux系统性能监控--I/O利用率
  15. ASP.NET Web API之消息拦截
  16. Oracle&amp;SQLServer中实现跨库查询
  17. Ex 6_9 某个字符串处理语言提供了一个将字符串一分为二的基本操作..._第六次作业
  18. 第七章 :分布式监控与SNMP监控
  19. Android - 序列化与反序列化
  20. 五、概念数据模型(CDM生成LDM,PDM和OOM)

热门文章

  1. Windows应用程序运行权限设置
  2. cxGrid 隔行换色
  3. sql优化(2)
  4. POJ 3020 Antenna Placement【二分匹配——最小路径覆盖】
  5. Logon Session Times
  6. iOS与导航相关的都在这
  7. c#读取excel到dataset
  8. ES6通过Set数组去重
  9. &quot;零代码”开发B/S企业管理软件之二:怎么创建数据源
  10. 总结! http post请求 application/x-www-form-urlencoded body体数据获取不到?