【Codeforces Round #460 (Div. 2) D】Substring
【链接】 我是链接,点我呀:)
【题意】
在这里输入题意
【题解】
如果有环
->直接输出-1
(拓扑排序如果存在某个点没有入过队列,说明有环->即入队的节点个数不等于n
否则。
说明可以做拓扑排序。
->是一个有向无环图。
那么定义f[x][y]
表示x节点前面的某条路径中,字母y出现的最多次数是多少次。
在拓扑排序的时候做DP就好。
(可以百度:有向无环图 DP 应该有挺多类似的题的
从入度为0的点开始进行DP。
然后遇到分叉的时候也没关系
取两条路中对应字母的较大值就好。
所以最后f[x][y]中不同字母的最大值可能就是不同的路径了。
(是哪一条不好说
然后显然你尽可能地多走一点路总是没错的。
(走过的点越多,字母出现的频率越高。
所以肯定是从一个端点到达另外一个端点。
(即从入度为0的端点开始走.
【代码】
#include <bits/stdc++.h>
using namespace std;
const int N = 3e5;
int n,m,k,flag[N+10],now,dp[N+10][30];
char s[N+10];
vector<int> g[N+10];
int ru[N+10],a[N+10];
queue<int> dl;
int main(){
#ifdef LOCAL_DEFINE
freopen("rush_in.txt", "r", stdin);
#endif
ios::sync_with_stdio(0),cin.tie(0);
cin >> n >> m;
cin >>(s+1);
for (int i = 1;i <= m;i++){
int x,y;
cin >> x >> y;
g[x].push_back(y);
ru[y]++;
}
for (int i = 1;i <= n;i++){
a[i] = s[i]-'a'+1;
if (ru[i]==0){
dp[i][a[i]]++;
dp[i][0] = 1;
}
}
int num = 0;
for (int i = 1;i <= n;i++)
if (ru[i]==0){
num++;
dl.push(i);
ru[i] = -1;
}
while (!dl.empty()){
int x = dl.front();
dl.pop();
for (int y:g[x]){
if (ru[y]<=0) continue;
if (dp[y][0]==0){
for (int i = 1;i <= 26;i++)
dp[y][i] = dp[x][i]+(a[y]==i);
}else{
for (int i = 1;i <=26;i++)
dp[y][i] = max(dp[y][i],dp[x][i]+(a[y]==i));
}
dp[y][0] = 1;
ru[y]--;
if (ru[y]==0){
num++;
dl.push(y);
}
}
}
if (num!=n){
cout<<-1<<endl;
return 0;
}
int ma = 0;
for (int i = 1;i <= n;i++)
if (dp[i][0]){
for (int j = 1;j <= 26;j++)
ma = max(ma,dp[i][j]);
}
cout<<ma<<endl;
return 0;
}
【Codeforces Round #460 (Div. 2) D】Substring的更多相关文章
- 【Codeforces Round #460 (Div. 2) C】 Seat Arrangements
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 用pre[i][j]表示第i行前j列的和. 然后枚举连续座位的最左上点. (有两种可能向右或向下k个. 则还需要处理出pre2[i] ...
- 【Codeforces Round #460 (Div. 2) B】 Perfect Number
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 直接暴力求出第k个perfect数字就好. 纯模拟. [代码] #include <bits/stdc++.h> #de ...
- 【Codeforces Round #460 (Div. 2) A】 Supermarket
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 就是让你求m*(ai/bb)的最小值 [代码] #include <bits/stdc++.h> #define dou ...
- 【Codeforces Round #432 (Div. 1) B】Arpa and a list of numbers
[链接]h在这里写链接 [题意] 定义bad list是一个非空的.最大公约数为1的序列.给定一个序列,有两种操作:花费x将一个元素删除.花费y将一个元素加1,问你将这个序列变为good list所需 ...
- 【Codeforces Round #420 (Div. 2) C】Okabe and Boxes
[题目链接]:http://codeforces.com/contest/821/problem/C [题意] 给你2*n个操作; 包括把1..n中的某一个数压入栈顶,以及把栈顶元素弹出; 保证压入和 ...
- 【Codeforces Round #420 (Div. 2) B】Okabe and Banana Trees
[题目链接]:http://codeforces.com/contest/821/problem/B [题意] 当(x,y)这个坐标中,x和y都为整数的时候; 这个坐标上会有x+y根香蕉; 然后给你一 ...
- 【Codeforces Round #420 (Div. 2) A】Okabe and Future Gadget Laboratory
[题目链接]:http://codeforces.com/contest/821/problem/A [题意] 给你一个n*n的数组; 然后问你,是不是每个位置(x,y); 都能找到一个同一行的元素q ...
- 【Codeforces Round #423 (Div. 2) C】String Reconstruction
[Link]:http://codeforces.com/contest/828/problem/C [Description] 让你猜一个字符串原来是什么; 你知道这个字符串的n个子串; 且知道第i ...
- 【Codeforces Round #423 (Div. 2) B】Black Square
[Link]:http://codeforces.com/contest/828/problem/B [Description] 给你一个n*m的格子; 里面包含B和W两种颜色的格子; 让你在这个格子 ...
随机推荐
- 怎样創建 iOS 展開式 UITableView?
原文:http://www.appcoda.com.tw/expandable-table-view/ 译者:kmyhy(appcoda的驻站译者) 幾乎全部的 App 都會以導航的方式向用戶展示多個 ...
- zzulioj--1817--match number(水题)
1817: match number Time Limit: 1 Sec Memory Limit: 128 MB Submit: 98 Solved: 45 SubmitStatusWeb Bo ...
- isInstanceOf,asInstanceOf,classOf[T]
一.scala中把classOf[T]看成Java里的T.class, obj.isInstanceOf[T]看成 obj instanceof T, obj.asInstanceOf[T]看成(T) ...
- PDO 拿出來的 Float 數據跟数据库中的数据不匹配
数据库中的价格字段是 float 类型的,在 Laravel 中取出会出现这样的情况 数据库:71.9 -> 程序打印:72.0 数据库:75.2 -> 程序打印:75.3 在另外一个测试 ...
- Oracle的Clob转换类型
import java.sql.CallableStatement; import java.sql.PreparedStatement; import java.sql.ResultSet; imp ...
- 大数问题(相加) A + B
I have a very simple problem for you. Given two integers A and B, your job is to calculate the Sum o ...
- [SCOI2008]着色方案 递推 记忆化搜索
我们发现 $c_{i}$ 和 $k$ 的规模非常小我们还发现每种颜色的位置是不必知道的,只要这种颜色和相邻的颜色种类不同即可.定义状态 $f[a][b][c][d][e][last]$,代表有 $a$ ...
- iOS——集成支付宝 系统繁忙,请稍后再试ALI10
问题描述:调用支付宝时,显示系统繁忙,请稍后再试(ALI10).代码没有报错,其他也是按照文档来的,为何老是提示显示系统繁忙? 解决方案:还需要在targets的中info里面,添加 url typ ...
- 记intel杯比赛中各种bug与debug【其四】:基于长短时记忆神经网络的中文分词的实现
(标题长一点就能让外行人感觉到高大上) 直接切入主题好了,这个比赛还必须一个神经网络才可以 所以我们结合主题,打算写一个神经网络的中文分词 这里主要写一下数据的收集和处理,网络的设计,代码的编写和模型 ...
- who---显示目前登录系统的用户信息
who命令是显示目前登录系统的用户信息.执行who命令可得知目前有那些用户登入系统,单独执行who命令会列出登入帐号,使用的终端机,登入时间以及从何处登入或正在使用哪个X显示器. 语法 who(选项) ...