cf460d2 动态规划+深度优先搜索
2018-02-02 15:21
447 查看
D. Substring
time limit per test
3 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output
You are given a graph with n nodes and m directed edges.
One lowercase letter is assigned to each node. We define a path's value as the number of the most frequently occurring letter. For example, if letters on a path are "abaca",
then the value of that path is 3. Your task is find a path whose value is the largest.
Input
The first line contains two positive integers n, m
121fc
(1 ≤ n, m ≤ 300 000),
denoting that the graph has n nodes and m directed
edges.
The second line contains a string s with only lowercase English letters. The i-th
character is the letter assigned to the i-th node.
Then m lines follow. Each line contains two integers x, y (1 ≤ x, y ≤ n),
describing a directed edge from x to y.
Note that x can be equal to y and
there can be multiple edges between x and y.
Also the graph can be not connected.
Output
Output a single line with a single integer denoting the largest value. If the value can be arbitrarily large, output -1 instead.
Examples
input
output
input
output
input
output
Note
In the first sample, the path with largest value is 1 → 3 → 4 → 5. The value is 3 because
the letter 'a' appears 3 times.
/*这道题目是D题,思路是用dfs跑一遍结合动态规划算出一条路径上出现的次数最多的字母(转成数字,比如s[i]-'a'),比较各条路径,特殊情况是
time limit per test
3 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output
You are given a graph with n nodes and m directed edges.
One lowercase letter is assigned to each node. We define a path's value as the number of the most frequently occurring letter. For example, if letters on a path are "abaca",
then the value of that path is 3. Your task is find a path whose value is the largest.
Input
The first line contains two positive integers n, m
121fc
(1 ≤ n, m ≤ 300 000),
denoting that the graph has n nodes and m directed
edges.
The second line contains a string s with only lowercase English letters. The i-th
character is the letter assigned to the i-th node.
Then m lines follow. Each line contains two integers x, y (1 ≤ x, y ≤ n),
describing a directed edge from x to y.
Note that x can be equal to y and
there can be multiple edges between x and y.
Also the graph can be not connected.
Output
Output a single line with a single integer denoting the largest value. If the value can be arbitrarily large, output -1 instead.
Examples
input
5 4 abaca 1 2 1 3 3 4 4 5
output
3
input
6 6
xzyabc
1 2
3 1
2 35 44 36 4
output
-1
input
10 14 xzyzyzyzqx 1 2 2 4 3 5 4 5 2 6 6 8 6 5 2 10 3 9 10 9 4 6 1 10 2 8 3 7
output
4
Note
In the first sample, the path with largest value is 1 → 3 → 4 → 5. The value is 3 because
the letter 'a' appears 3 times.
/*这道题目是D题,思路是用dfs跑一遍结合动态规划算出一条路径上出现的次数最多的字母(转成数字,比如s[i]-'a'),比较各条路径,特殊情况是
判环,可以用topsort,也可以用dfs设定标志位的方法来判定,详见下dfs1()
#include<bits/stdc++.h> using namespace std; const int MAXN=300005; vector<int> e[MAXN]; char str[MAXN]; int vis[MAXN],cir; void dfs1(int u) { cir|=(vis[u]==1); if(vis[u])return; vis[u]=1; for(int i=0;i<(int)e[u].size();i++) { int v=e[u][i]; dfs1(v); } vis[u]=2; } int dp[MAXN]; void dfs2(int u,int sp) { if(vis[u])return; vis[u]=1; int mx=0; for(int i=0;i<(int)e[u].size();i++) { int v=e[u][i]; dfs2(v,sp); mx=max(mx,dp[v]); } dp[u]=mx+(str[u]-'a'==sp); } int main() { int n,m; scanf("%d%d%s",&n,&m,str+1); for(int i=1;i<=m;i++) { int u,v; scanf("%d%d",&u,&v); e[u].push_back(v); } for(int i=1;i<=n;i++) if(!vis[i])dfs1(i); if(cir)return 0*printf("-1\n"); int res=0; for(int _=0;_<26;_++) { for(int i=1;i<=n;i++) dp[i]=vis[i]=0; for(int i=1;i<=n;i++) if(!vis[i])dfs2(i,_); for(int i=1;i<=n;i++) res=max(res,dp[i]); } return 0*printf("%d\n",res); }
相关文章推荐
- 对状态空间图搜索的几种算法比较(图)【深度、宽度、动态规划(均一代价)、最佳优先和A*算法】
- pat L3-008 DFS深度优先搜索
- Java深度优先搜索两点间路径,支持命令行参数,约束条件设置
- 广度 / 深度优先搜索
- 深度优先搜索之拯救ice-cream
- 利用深度优先搜索做的随机生成地图的迷宫小游戏
- 深度优先搜索之部分和问题
- 挑战程序设计竞赛:深度优先搜索
- 深度优先搜索之穿越雷区
- 【BFS】广度优先搜索&【DFS】深度优先搜索
- 图的遍历之 深度优先搜索和广度优先搜索
- HDU1269--迷宫城堡--深度优先搜索
- C语言通过深度优先搜索来解电梯问题和N皇后问题的示例
- 数据结构之深度优先搜索
- 深度优先搜索
- 深度优先搜索和广度优先搜索(1)
- 【面试题】迷宫问题-----深度优先搜索----栈
- 图深度优先搜索之能否到达终点
- nyoj 部分和问题(深度优先搜索DFS)
- HDU--杭电--1716--排列2--深度优先搜索