题目:Substring

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

题解:当这个有向图构成一个环的时候就会使得值无限大,所以先用拓扑排序判断一下有没有环,如果有环直接输出-1, 如果没有环就再使用树形dp并记忆化存数,来找到最大值。

代码:

 #include<cstring>
#include<iostream>
using namespace std;
const int N = +;
string str;
int head[N], c[N], topo[N], dp[N][];
int cnt = , n, m, k, ans = ;
struct Node
{
int nx;
int to;
}Edge[N];
void add_edge(int u, int v)
{
Edge[cnt].to = v;
Edge[cnt].nx = head[u];
head[u] = cnt++;
}
bool dfs(int u)
{
c[u] = -;
for(int i = head[u]; ~i; i = Edge[i].nx)
{
int v = Edge[i].to;
if(c[v] < ) return false;
else if(!c[v] && !dfs(v)) return false;
}
c[u] = ;
topo[--k] = u;
return true;
}
bool topo_sort()
{
k = n;
memset(c, , sizeof(c));
for(int i = ; i < n; i++)
{
if(!c[i])
if(!dfs(i)) return false;
}
return true;
}
void dfs_count(int u)
{
c[u] = ;
for(int i = head[u]; ~i; i = Edge[i].nx)
{
int v = Edge[i].to;
if(!c[v]) dfs_count(v);
for(int i = ; i < ; i++)
{
if(dp[u][i] < dp[v][i])
{
dp[u][i] = dp[v][i];
int tmp = (str[u]-'a' == i)? dp[u][i]+ : dp[u][i];
if(tmp > ans) ans = tmp;
}
}
}
dp[u][str[u]-'a']++;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie();
memset(head, -, sizeof(head));
cin >> n >> m;
cin >> str;
int u, v;
for(int i = ; i <= m; i++)
{
cin >> u >> v;
add_edge(u-, v-);
}
if(!topo_sort())
{
cout << - << endl;
return ;
}
memset(c, , sizeof(c));
for(int i = ; i < n; i++)
{
if(!c[topo[i]])
dfs_count(topo[i]);
}
cout << ans << endl;
}

Codeforces 919D Substring (拓扑排序+树形dp)的更多相关文章

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

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

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

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

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

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

  4. CodeForces 721C Journey(拓扑排序+DP)

    <题目链接> 题目大意:一个DAG图有n个点,m条边,走过每条边都会花费一定的时间,问你在不超过T时间的条件下,从1到n点最多能够经过几个节点. 解题分析:对这个有向图,我们进行拓扑排序, ...

  5. Codeforces 919D - Substring

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

  6. codeforces 161D Distance in Tree 树形dp

    题目链接: http://codeforces.com/contest/161/problem/D D. Distance in Tree time limit per test 3 secondsm ...

  7. codeforces 337D Book of Evil (树形dp)

    题目链接:http://codeforces.com/problemset/problem/337/D 参考博客:http://www.cnblogs.com/chanme/p/3265913 题目大 ...

  8. HDU 5811 Colosseo(拓扑排序+单调DP)

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5811 [题目大意] 给出 一张单向图,现在将其划分成了两个部分,问划分之后的点是否分别满足按照一定 ...

  9. CF-721C DAG图拓扑排序+费用DP

    比赛的时候写了个记忆化搜索,超时了. 后来学习了一下,这种题目应该用拓扑排序+DP来做. dp[][]保存走到[第i个节点][走过j个点]时所用的最短时间. pre[][]用前驱节点求路径 然后遍历一 ...

随机推荐

  1. React Hooks 深入系列 —— 设计模式

    本文是 React Hooks 深入系列的后续.此篇详细介绍了 Hooks 相对 class 的优势所在, 并介绍了相关 api 的设计思想, 同时对 Hooks 如何对齐 class 的生命周期钩子 ...

  2. 虚拟机ip地址从ipv6改为ipv4相关问题

    有一次打开虚拟机时,Xshell连接不上虚拟机,就很奇怪,然后查看虚拟机的ip地址,发现显示为ipv6格式,然后总结了两种情况如下: 第一种情况: onboot为no时显示ipv6地址, 改为yes即 ...

  3. mysql是如何实现事务隔离以及MVCC详解

    提到事务,你肯定会想到ACID(Atomicity.Consistency.Isolation.Durability,即原子性.一致性.隔离性.持久性),我们就来说说其中I,也就是"隔离性& ...

  4. spark shuffle的写操作之准备工作

    前言 在前三篇文章中,spark 源码分析之十九 -- DAG的生成和Stage的划分 剖析了DAG的构建和Stage的划分,spark 源码分析之二十 -- Stage的提交 剖析了TaskSet任 ...

  5. 微信小程序的视图与渲染

    1.组件的基本使用 <button type="default" > default </button> <button type="pri ...

  6. Android OTG之USB转串口模块通讯

    微信公众号:CodingAndroid CSDN:http://blog.csdn.net/xinpengfei521 1.背景简介 我们公司开发了一款室内机平板APP应用,要求平板能去控制智能门锁. ...

  7. linux细节操作的

    一>安装mysql 可以直接在linux系统下载 下载之前要安装wget插件 下载命令 wget 后面跟安装软件的url 比如mysql wget http://repo.mysql.com/m ...

  8. 五分钟学会悲观乐观锁-java vs mysql vs redis三种实现

    1 悲观锁乐观锁简介 乐观锁( Optimistic Locking ) 相对悲观锁而言,乐观锁假设认为数据一般情况下不会造成冲突,所以在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测,如果 ...

  9. [FJOI2015]火星商店问题(线段树分治,可持久化,Trie树)

    [FJOI2015]火星商店问题 前天考了到线段树分治模板题,全场都切了,就我不会QAQ 于是切题无数的Tyher巨巨就告诉我:"你可以去看看火星商店问题,看了你就会了." 第一道 ...

  10. Django对接SQL Server服务

    1.环境描述环境:Win7 + Django2.1.10 + SQL Server 2014 + Python3.6 + PyCharm 2017.2.3 x64 2.安装插件由于Django默认是不 ...