codeforce 460DIV2 D题
感觉这个题不错,对拓扑排序有了更深的了解,用两种拓扑排序都写了些试试。
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题的更多相关文章
- codeforce 461DIV2 F题
题意 题目给出n,k,要求找出一个1到n的子集,(a,b)的对数等于k:(a,b)满足a<b且b%a==0: 分析 还记不记得求素数的时候的欧拉筛!对就那样!如果把每个数字看作一个点的话,可以通 ...
- codeforce 461DIV2 E题
题意 有n棵树排成一排,每个树上都有c[i]只小鸟,只有站在树下才可以召唤小鸟,在i-th树下召唤k(k<=c[i])只小鸟需要消耗cost[i]*k的法力值,但是每召唤一只小鸟可以将法力值的上 ...
- codeforce 462DIV2 C题
题意 给出一个只含有1和2的序列,有n个元素,可以选择一段区间进行翻转操作,求再反转后的最大非递减子序列的长度 分析 太菜了只想出了N^2的做法.序列只有1和2,那么每个非递减子序列都会有一个分界点, ...
- codeforce 459DIV2 C题
题意 一串括号字符串,里面存在一些‘?’,其中‘?’既可以当作 '(' 又可以当作 ')' ,计算有多少对(l,r),在s中[sl,s(l+1),s(l+2),.....sr],内的括号是匹配的.n= ...
- Two progressions CodeForce 125D 思维题
An arithmetic progression is such a non-empty sequence of numbers where the difference between any t ...
- codeforce 457DIV2 C题
题意 你需要构造一个n个点m条边的无向有权图,要求这个图的MST中边权的和与从1到n的最短路长度都为素数 分析 可以想到这样一种贪心,在i到i+1直接连一条边,这样最短路和MST都会是同样的一些边.只 ...
- codeforce 457DIV2 B题
题意: 题目给出两个整数n,k,(n<=10^18,k<=10^5),求一个含有k个整数的序列,要求以2为底,以序列内数字为幂的和为n,其中序列内最大的数最小,若有多个序列满足条件,输出 ...
- DSU on Tree浅谈
DSU on tree 在之前的一次比赛中,学长向我们讲了了这样一个神奇的思想:DSU on tree(树上启发式合并),看上去就非常厉害--但实际上是非常暴力的一种做法;不过暴力只是看上去暴力,它在 ...
- ACDream手速赛2
地址:http://acdream.info/onecontest/1014 都是来自Codeforce上简单题. A. Boy or Girl 简单字符串处理 B. Walking in ...
随机推荐
- prefixfree.min.js 的用途
简单而言,这东西就是自动加前缀的,在link中,或是style中,或是dom元素的style中书写CSS3 code,或是jQuery .css()方法此脚本会自动补上需要的前缀,让响应的浏览器支持该 ...
- 【英语】TED视频笔记
2014-09-22 讲话的七宗罪呢:流言蜚语.评判.消极.抱怨.借口.浮夸.固执己见. 讲话的四个要素:HAIL - 诚实,做自己,说到做到,爱. 2014-09-23 Do more of the ...
- flask中cookie和session介绍
flask中cookie和session介绍 一.cookie: 在网站中,http请求是无状态的.也就是说即使第一次和服务器连接后并且登录成功后,第二次请求服务器依然不能知道当前请求是哪个用户.co ...
- java RE(正则表达式)
验证姓名,邮箱,手机号,密码 import java.util.regex.Pattern; /** * 账户相关属性验证工具 * */ public class AccountValidatorUt ...
- c# 统计运行时间
long startTime = Environment.TickCount; long endTime = Environment.TickCount; long totalTime = endTi ...
- Spring Boot系列—(一)入门
前言 因为项目组需要进行微服务改造,而微服务开发中需要以Spring Boot为基础.因此需要先弄懂SpringBoot. 我们先来看看SpringBoot的背景由来,SpringBoot是什么,一个 ...
- 数据库中字段的数据类型与JAVA中数据类型的对应关系
类型名称 显示长度 数据库类型 JAVA类型 JDBC类型索引(int) 描述 VARCHAR L+N VARCHAR java.lang.String 12 CHAR N ...
- javabrideg的使用实践
(1)进入这个网站http://sourceforge.net/projects/php-java-bridge/files,选择Binary package,然后选择最新的版本Php-java-br ...
- 洛谷 1099 ( bzoj 1999 ) [Noip2007]Core树网的核
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1999 <算法竞赛进阶指南>346页.https://www.cnblogs.co ...
- 集群/分布式环境下,Session处理策略
前言 在搭建完集群环境后,不得不考虑的一个问题就是用户访问产生的session如何处理.如果不做任何处理的话,用户将出现频繁登录的现象.比如集中中存在A.B两台服务器,用户在第一次访问网站是,Ngin ...