http://codeforces.com/problemset/problem/919/D

就是先判环,如果有环就-1,否则对每个字母分开跑一下dp

错误记录:

1.有向图判环,自环一定要特判!(不能直接用强连通)

2.思考的时候很容易跑偏,去想把各个字母合在一起dp,不知道为什么?

 #include<cstdio>
#include<vector>
#include<algorithm>
#include<queue>
#include<cstring>
using namespace std;
struct E
{
int to,nxt;
}e[];
int f1[],ne,sccc,sccnum[],top,dfn[],dfsc,low[];
int s[],n,m;
void me(int u,int v)
{
e[++ne].to=v;
e[ne].nxt=f1[u];
f1[u]=ne;
} void dfs(int u)
{
low[u]=dfn[u]=++dfsc;
s[++top]=u;
for(int k=f1[u],v;k!=;k=e[k].nxt)
{
v=e[k].to;
if(!dfn[v])
{
dfs(v);
low[u]=min(low[u],low[v]);
}
else if(!sccnum[v])
low[u]=min(low[u],dfn[v]);
}
if(low[u]==dfn[u])
{
sccc++;
while(top&&s[top]!=u) sccnum[s[top--]]=sccc;
sccnum[s[top--]]=sccc;
}
}
char ss[];
int ans[],in[],in2[],anss;
queue<int> q;
int main()
{
int c1,c2,i,k,t;char cc;
scanf("%d%d%s",&n,&m,ss+);
for(i=;i<=m;i++)
{
scanf("%d%d",&c1,&c2);
if(c1==c2)
{
puts("-1");
return ;
}
me(c1,c2);in2[c2]++;
}
for(i=;i<=n;i++)
if(!dfn[i])
dfs(i);
if(sccc!=n)
{
puts("-1");
return ;
}
for(cc='a';cc<='z';cc++)
{
memset(ans,,sizeof(ans));
memcpy(in,in2,sizeof(in));
for(i=;i<=n;i++)
if(!in[i])
q.push(i);
while(!q.empty())
{
t=q.front();q.pop();ans[t]+=ss[t]==cc;
anss=max(anss,ans[t]);
for(k=f1[t];k;k=e[k].nxt)
{
in[e[k].to]--;ans[e[k].to]=max(ans[e[k].to],ans[t]);
if(!in[e[k].to]) q.push(e[k].to);
}
}
}
printf("%d",anss);
return ;
}

Substring CodeForces - 919D的更多相关文章

  1. Codeforces 919D - Substring

    919D - Substring 思路: 拓扑排序判环+DAG上dp+记忆化搜索 状态:dp[i][j]表示以i为起点的路径中j的最大出现次数 初始状态:dp[i][j]=1(i have no so ...

  2. Codeforces 919D Substring (拓扑排序+树形dp)

    题目:Substring 题意:给你一个有向图, 一共有n个节点 , m条变, 一条路上的价值为这个路上出现过的某个字符最多出现次数, 现求这个最大价值, 如果价值可以无限大就输出-1. 题解:当这个 ...

  3. Codeforces 919D:Substring(拓扑排序+DP)

    D. Substring time limit: per test3 seconds memory limit: per test256 megabytes inputstandard: input ...

  4. Codeforces 919D Substring 【拓扑排序】+【DP】

    <题目链接> 题目大意:有一个具有n个节点,m条边的有向图,每个点对应一个小写字母,现在给出每个顶点对应的字母以及有向边的连接情况,求经过的某一条路上相同字母出现的最多次数.如果次数无限大 ...

  5. CodeForces - 919D Substring (拓扑排序+dp)

    题意:将一个字符串上的n个字符视作点,给出m条有向边,求图中路径上最长出现的相同字母数. 分析:首先如果这张图中有环,则可以取无限大的字符数,在求拓扑排序的同时可以确定是否存在环. 之后在拓扑排序的结 ...

  6. Codeforces 919D Substring (拓扑图DP)

    手动博客搬家: 本文发表于20180716 10:53:12, 原地址https://blog.csdn.net/suncongbo/article/details/81061500 给定一个\(n\ ...

  7. Codeforces 919D Substring ( 拓扑排序 && DAG上的DP )

    题意 : 给出含有 N 个点 M 条边的图(可能不连通或者包含环),每个点都标有一个小写字母编号,然后问你有没有一条路径使得路径上重复字母个数最多的次数是多少次,例如图上有条路径的顶点标号顺序是  a ...

  8. The minimal unique substring CodeForces - 1159D (构造)

    核心观察是形如01,001,0001,...的串循环时, $n$每增长1, $k$就增长1. #include <iostream> #include <sstream> #i ...

  9. 【学习笔记】有向无环图上的DP

    手动博客搬家: 本文发表于20180716 10:49:04, 原地址https://blog.csdn.net/suncongbo/article/details/81061378 首先,感谢以下几 ...

随机推荐

  1. openwrt gstreamer实例学习笔记(二.gstreamer 的 Element)

    对程序员来说,GStreamer 中最重要的一个概念就是 GstElement 对象.该对象是构建一个媒体管道的基本块.所有上层(high-level)部件都源自GstElement对象.任何一个解码 ...

  2. 每日五题(Spring)

    1使用Spring框架的优点是什么? 控制反转: Spring通过控制反转实现了松散耦合,对象们给出它们的依赖,而不是创建或查找依赖的对象们. 面向切面的编程(AOP): Spring支持面向切面的编 ...

  3. VUE 之 vuex 和 axios

    1.Vuex 部分 1.1 Vuex 是专门为vue.js设计的集中式状态管理架构,其实就是将数据存在一个store中,共各个组件共享使用 1.2 配置: 1.2.1 下载:--npm install ...

  4. Apach Web Server区别于其他应用服务器的主要特点是什么?

    Web服务器一般指的是处理静态请求或转发http请求的服务器,而应用服务器一般是用来处理动态请求的服务器.

  5. FLTK 简介

          FLTK,如同其名字所表达的:The Fast Light Tool Kit,一个轻量级的GUI开发库.但这轻量级并不代表功能的羸弱,相反,FLTK在具有基本的GUI功能之外,还拥有一些特 ...

  6. iOS开发UIScrollView常见属性和方法

    一.ScrollView常用方法和属性 @property(nonatomic)CGPoint contentOffset; 设置滚动的偏移量 @property(nonatomic)CGSize c ...

  7. react native camera

    最近在尝试用react native camera iOS版本很方便就调试通过了,react的试用非常方便 android版本要单独试用fork的 屏蔽了lint的报错后也可以调试通过 参考这篇文章填 ...

  8. 计算机学院大学生程序设计竞赛(2015’12)Bitwise Equations

    Bitwise Equations Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  9. easyUI-右键菜单,关闭选项卡

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  10. 自定义android 音乐通知栏 ——可伸缩扩展

    Android custom notification for music player Example   In this tutorial, you will learn how to creat ...