题意:给你一个有向图,每个节点都有一个字母,一条路径(可以重复经过点或边)的值为出现次数最多的字母出现次数,求出路径的最大值(如果无穷大输出-1)

思路:有环就是-1,有向图判环可以用DPS,也可以BFS

接下来就是个有向无环图,暴力26个字母,对于当前字母x,将所有为x的节点权值设为1,其它节点权值设为0

就是一个非常简单的DP了

复杂度O(27n)

#include<stdio.h>
#include<queue>
#include<vector>
#include<string.h>
#include<functional>
using namespace std;
vector<int> G[300005];
priority_queue<int, vector<int>, greater<int> > q;
char str[300005];
int ans, in[300005], flag[300005], vis[300005], dp[300005], val[300005];
void Sech(int u)
{int i, v;dp[u] = val[u];vis[u] = 1;for(i=0;i<G[u].size();i++){v = G[u][i];if(vis[v]==0)Sech(v);dp[u] = max(dp[u], dp[v]+val[u]);}ans = max(ans, dp[u]);
}
int main(void)
{int n, m, i, j, x, y, now, temp;scanf("%d%d%s", &n, &m, str+1);for(i=1;i<=m;i++){scanf("%d%d", &x, &y);G[x].push_back(y);in[y]++, flag[y]++;}for(i=1;i<=n;i++){if(in[i]==0){vis[i] = 1;q.push(i);}}while(q.empty()==0){now = q.top();q.pop();for(i=0;i<G[now].size();i++){temp = G[now][i];in[temp]--;if(in[temp]==0){vis[temp] = 1;q.push(temp);}}}for(i=1;i<=n;i++){if(vis[i]==0){printf("-1\n");return 0;}}for(i=0;i<=25;i++){memset(vis, 0, sizeof(vis));for(j=1;j<=n;j++){if(str[j]=='a'+i)val[j] = 1;elseval[j] = 0;}for(j=1;j<=n;j++){if(flag[j]==0)Sech(j);}}printf("%d\n", ans);return 0;
}

Codeforces Round #460 (Div. 2): D. Substring(有向图)相关推荐

  1. [Codeforces]Codeforces Round #460 (Div. 2)

    Supermarket 找最便宜的就行 Solution Perfect Number 暴力做 Solution Seat Arrangement 注意当k=1时,横着和竖着是同一种方案 Soluti ...

  2. Codeforces Round #460 (Div. 2)

    A 签到 B 题意 定义:一个数(没有前缀0)的各个位数之和为10位"perfec"数,问第k个"perfect"数位多少(1<=k<=1e5) 分 ...

  3. Codeforces Round #460 (Div. 2): E. Congruence Equation(枚举)

    题意:给出a, b, p, x,求有多少个n满足①n*a^n%p==b:②n<=x 思路:先要知道一个很简单的性质:a^n%p的值一定存在循环节(n=0就进入循环),且周期T一定是p-1的约数 ...

  4. Codeforces Round #590 (Div. 3) F. Yet Another Substring Reverse 子集dp

    传送门 文章目录 题意: 思路: 题意: 思路: 之前做过类似的题,翻转一个字串相当于将任意两个不相交的串连在一起.再一看字符集≤20\le20≤20,那就是铁子集dpdpdp了. 定义f[i]f[i ...

  5. Codeforces Round #506 (Div. 3)

    Codeforces Round #506 (Div. 3) 实习期间事不多,对div3 面向题解和数据编程了一波 A. Many Equal Substrings 题目链接 A题就是找后缀和前缀重合 ...

  6. Codeforces Round #563 (Div. 2)/CF1174

    Codeforces Round #563 (Div. 2)/CF1174 CF1174A Ehab Fails to Be Thanos 其实就是要\(\sum\limits_{i=1}^n a_i ...

  7. 构造 Codeforces Round #302 (Div. 2) B Sea and Islands

    题目传送门 1 /* 2 题意:在n^n的海洋里是否有k块陆地 3 构造算法:按奇偶性来判断,k小于等于所有点数的一半,交叉输出L/S 4 输出完k个L后,之后全部输出S:) 5 5 10 的例子可以 ...

  8. Codeforces Round #696 (Div. 2) (A ~ E)超高质量题解(每日训练 Day.16 )

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Codeforces Round #696 (Div. 2) (A ~ E)超高质量题解 比赛链接:h ...

  9. Codeforces Round #712 Div.2(A ~ F) 超高质量题解(每日训练 Day.15 )

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Codeforces Round #712 Div.2(A ~ F) 题解 比赛链接:https:// ...

最新文章

  1. 在线作图|如何实现染色体标记
  2. git 冲突覆盖_git pull冲突解决之强制覆盖
  3. SqlServer 增加字段,修改字段名,删除字段,修改字段默认值
  4. 5-1 逻辑回归代码(含warning解释)
  5. PostgreSQL开放自由
  6. C语言520心形表白,初学者福利!!
  7. 牌类游戏使用微服务重构笔记(八): 游戏网关服务器
  8. C语言重难点:运算符优先级
  9. php 不解析,php不解析html代码
  10. [译] Go 并发编程基础
  11. 实现京东金融-悬浮框效果
  12. 微软全球副总裁洪小文:微软未来的三大战略
  13. 自动提示文本框和下拉框
  14. 计算机用户文件夹加密,如何加密文件夹?手把手教你给文件夹加密方法
  15. 虚拟光驱打开.bin 文件
  16. 计算机全键在线使用说明书,笔记本电脑键盘介绍图,笔记本键盘全部按键功能介绍说明-系统城...
  17. linux系统下使用gcc编译C++程序出现XXX未定义的引用的处理
  18. Si512 支持 NFC 协议超低功耗检卡能非接触式读卡芯片
  19. 一文读懂对抗学习!5千字精炼提干
  20. 冬令营2015 酱油记

热门文章

  1. python有哪些用途-Python有哪些用途
  2. python新手入门代码-新手必看:手把手教你入门 Python
  3. python快速入门教程-Python快速入门
  4. python和java选择哪个-python和java哪个学起来更简单
  5. [转]Kaldi语音识别
  6. Node.js模块化开发(非常详细,满满的干货)
  7. 【设计模式笔记】抽象工厂模式
  8. C++发送HTTP请求获取网页HTML代码
  9. html5圆形提交按钮样式,HTML5 SVG带圆形进度条动画的提交按钮特效
  10. html 图片使用scale,CSS scale()用法及代码示例