感觉这个题不错,对拓扑排序有了更深的了解,用两种拓扑排序都写了些试试。

dfs

 #include <cstdio>
#include <algorithm>
#include <iostream>
#include <cstring>
#include <vector>
using namespace std;
const int maxn=+;
char s[maxn];
vector<int>G[maxn];
int n,m;
int f[maxn][];
int vis[maxn];
int in[maxn];
bool dfs(int u){
vis[u]=-;
for(int i=;i<G[u].size();i++){
int v=G[u][i];
if(vis[v]==-)return false;
if(!vis[v]&&!dfs(v))return false;
for(int i=;i<;i++){
f[u][i]=max(f[u][i],f[v][i]);
}
}
f[u][s[u]-'a']++;
vis[u]=;
return true;
}
bool topo(){
memset(vis,,sizeof(vis));
for(int i=;i<=n;i++)if(!vis[i]){
if(!dfs(i))return false;
}
return true;
}
int main(){
while(scanf("%d%d",&n,&m)!=EOF){
memset(in,,sizeof(in));
memset(f,,sizeof(f));
scanf("%s",s+);
for(int i=;i<=n;i++)G[i].clear();
for(int i=;i<=m;i++){
int a,b;
scanf("%d%d",&a,&b);
G[a].push_back(b);
if(a==b){
cout<<"-1"<<endl;
return ;
}
}
if(!topo()){
cout<<"-1"<<endl;
continue;
}
int ans=;
for(int i=;i<=n;i++){
for(int j=;j<;j++){
ans=max(ans,f[i][j]);
}
}
cout<<ans<<endl;
}
return ;
}

bfs

 #include <cstdio>
#include <algorithm>
#include <iostream>
#include <cstring>
#include <vector>
#include <queue>
using namespace std;
const int maxn=+;
vector<int>G[maxn];
queue<int>q;
char s[maxn];
int n,m;
int in[maxn],f[maxn][];
int main(){
scanf("%d%d",&n,&m);
memset(f,,sizeof(f));
memset(in,,sizeof(in));
scanf("%s",s+);
int a,b;
for(int i=;i<=m;i++){
scanf("%d%d",&a,&b);
G[a].push_back(b);
in[b]++;
}
for(int i=;i<=n;i++){
if(!in[i])q.push(i);
f[i][s[i]-'a']=;
}
while(!q.empty()){
int u=q.front();q.pop();
for(int i=;i<G[u].size();i++){
int v=G[u][i];
in[v]--;
if(!in[v])q.push(v);
for(int l=;l<;l++){
f[v][l]=max(f[v][l],f[u][l]+(s[v]==l+'a'));
}
}
}
for(int i=;i<=n;i++)if(in[i]){
cout<<"-1";
return ;
}
int ans=;
for(int i=;i<=n;i++){
for(int j=;j<;j++){
ans=max(ans,f[i][j]);
}
}
cout<<ans;
return ;
}

codeforce 460DIV2 D题的更多相关文章

  1. codeforce 461DIV2 F题

    题意 题目给出n,k,要求找出一个1到n的子集,(a,b)的对数等于k:(a,b)满足a<b且b%a==0: 分析 还记不记得求素数的时候的欧拉筛!对就那样!如果把每个数字看作一个点的话,可以通 ...

  2. codeforce 461DIV2 E题

    题意 有n棵树排成一排,每个树上都有c[i]只小鸟,只有站在树下才可以召唤小鸟,在i-th树下召唤k(k<=c[i])只小鸟需要消耗cost[i]*k的法力值,但是每召唤一只小鸟可以将法力值的上 ...

  3. codeforce 462DIV2 C题

    题意 给出一个只含有1和2的序列,有n个元素,可以选择一段区间进行翻转操作,求再反转后的最大非递减子序列的长度 分析 太菜了只想出了N^2的做法.序列只有1和2,那么每个非递减子序列都会有一个分界点, ...

  4. codeforce 459DIV2 C题

    题意 一串括号字符串,里面存在一些‘?’,其中‘?’既可以当作 '(' 又可以当作 ')' ,计算有多少对(l,r),在s中[sl,s(l+1),s(l+2),.....sr],内的括号是匹配的.n= ...

  5. Two progressions CodeForce 125D 思维题

    An arithmetic progression is such a non-empty sequence of numbers where the difference between any t ...

  6. codeforce 457DIV2 C题

    题意 你需要构造一个n个点m条边的无向有权图,要求这个图的MST中边权的和与从1到n的最短路长度都为素数 分析 可以想到这样一种贪心,在i到i+1直接连一条边,这样最短路和MST都会是同样的一些边.只 ...

  7. codeforce 457DIV2 B题

    题意:  题目给出两个整数n,k,(n<=10^18,k<=10^5),求一个含有k个整数的序列,要求以2为底,以序列内数字为幂的和为n,其中序列内最大的数最小,若有多个序列满足条件,输出 ...

  8. DSU on Tree浅谈

    DSU on tree 在之前的一次比赛中,学长向我们讲了了这样一个神奇的思想:DSU on tree(树上启发式合并),看上去就非常厉害--但实际上是非常暴力的一种做法;不过暴力只是看上去暴力,它在 ...

  9. ACDream手速赛2

    地址:http://acdream.info/onecontest/1014   都是来自Codeforce上简单题.   A. Boy or Girl 简单字符串处理   B. Walking in ...

随机推荐

  1. 如何用 Java 实现 Web 应用中的定时任务

    定时任务,是指定一个未来的时间范围执行一定任务的功能.在当前WEB应用中,多数应用都具备任务调度功能,针对不同的语音,不同的操作系统, 都有其自己的语法及解决方案,windows操作系统把它叫做任务计 ...

  2. vue动态 设置类名

    <div class="tab"> <navigator :class="currentTab=='mzfw'?'nav active': 'nav'& ...

  3. Navicat for MySQL导入.sql文件

    首先,打开Navicat for MySQL,打开需要使用的连接,新建一个数据库名等按自己的需求填写. 打开创建的数据库,在空白处右键,选择运行SQL文件,然后找到.SQL文件所在地址即可. MySQ ...

  4. Net Core网络通信

    Net Core网络通信 https://www.cnblogs.com/xxred/p/9859893.html 聊聊如何设计千万级吞吐量的.Net Core网络通信! 作者:大石头 时间:2018 ...

  5. 转:使用django-admin.py创建django工程

    原文:http://blog.csdn.net/a921800467b/article/details/8257352 安装Django首先需要安装数据库,可选的数据库有好几种,我选择的是MySQL数 ...

  6. django国际化总结

    转:http://blog.csdn.net/ybdesire/article/details/46806739

  7. 两种方式创建Maven项目【方式二】

    1.不勾选Create a simple project,直接点击下一步 2.选择maven-archetype-webapp下一步 3.填写相关信息,点击下一步完成 4.此时会报一个jsp的错误.我 ...

  8. PCBA 的收货要求记录

    PCBA 的收货要求记录 性能 功能性测试 外观 标识 需要可以识别的料号(客户料号或货号) 贴片 元件焊点饱满 元件参数统一 后焊 插件焊盘饱满 插件焊盘不可以有小孔 焊盘不可以有漏铜上锡均匀 体积 ...

  9. 通过API访问Ambari的配置

    HttpClient client = new HttpClient(); Base64.Encoder encoder = Base64.getEncoder(); HttpMethod metho ...

  10. php查询mysql时,报超出内存错误(select count(distinct))时

    学时服务器查询教练所带人数时,使用select count(distinct(u_STRNO))时报超出内存错误.后参考“mysqld-nt: Out of memory解决方法”http://jin ...