codeforces 919D Substring (拓扑排序 遍历所有通路)
2018-02-01 12:41
381 查看
链接:http://codeforces.com/contest/919/problem/D
题意:给你一个图,每一个节点都有一个小写字母,求所有通路里面某个字母出现的最多次数。
题目不难,直接找出所有通路就可以了,可以用dfs或者拓扑排序,然后用一个二维数组开一个dp[i][j] 到i点,j字母出现的最大次数。然后每次扫描到一个新节点更新一下26个字母对于i的变化就行。
代码如下:
题意:给你一个图,每一个节点都有一个小写字母,求所有通路里面某个字母出现的最多次数。
题目不难,直接找出所有通路就可以了,可以用dfs或者拓扑排序,然后用一个二维数组开一个dp[i][j] 到i点,j字母出现的最大次数。然后每次扫描到一个新节点更新一下26个字母对于i的变化就行。
代码如下:
#include<iostream> #include<string> #include<cmath> #include<cstring> #include<vector> #include<algorithm> #include<set> #include<map> #include<queue> using namespace std; const int MAX = 300010; const int MAX_N = 27; int dp[MAX][MAX_N]; vector<int> G[MAX]; int In[MAX]; char str[MAX]; int N,M; bool tobosort(){ int res = 0; memset(dp,0,sizeof(dp)); queue<int> q; for(int i=0;i<N;++i){ if(!In[i]){ res++; q.push(i); dp[i][str[i]-'a'] = 1; } } while(!q.empty()){ int v = q.front();q.pop(); for(vector<int>::iterator it = G[v].begin();it != G[v].end();++it){ In[*it]--; //更新字母对于该节点的变化 for(int i=0;i<26;++i){ dp[*it][i] = max(dp[*it] 4000 [i],(str[*it]-'a' == i) + dp[v][i]); } // printf("dp[%d][%d] = %d\n",*it,0,dp[*it][0]); if(!In[*it]){ q.push(*it); res++; } } } if(res == N) return true; else return false; } int main(void){ scanf("%d%d",&N,&M); scanf("%s",str); int u,v; memset(In,0,sizeof(In)); for(int i=1;i<=M;++i){ scanf("%d%d",&u,&v); u--;v--; In[v]++; G[u].push_back(v); } memset(dp,0,sizeof(dp)); if(!tobosort()){ printf("-1\n"); } else{ int res = 0; for(int i=0;i<N;++i){ for(int j=0;j<26;++j){ res = max(res,dp[i][j]); } } printf("%d\n",res); } return 0; }
相关文章推荐
- VS2010 实现文件夹浏览、遍历所有文件
- C#遍历一个文件夹下的所有文件夹
- 如何用foreach遍历页面上所有的TextBox(转载)
- [CodeForces 510C]Fox And Names[字典序][拓扑排序]
- python遍历一个目录,输出所有的文件名
- 遍历查找某个进程拥有的所有窗口
- js 获取函数的所有参数和遍历JavaScript某个对象所有的属性名称和值的方法
- Linux 实现遍历打印子目录中所有文件
- 遍历页面中所有的服务器控件TextBox
- IO流遍历文件夹下所有文件问题
- 如何遍历出ACCESS数据库中的所有表的表名
- 用ASP遍历所有的接收值
- OAF中 遍历HGrid组件中的所有VO行
- Java如何遍历Map的所有的元素
- java 从开始时间到结束时间遍历一年所有时间
- 第十二周 项目4 利用遍历思想求解图问题(输出通过一个节点的所有简单回路 )
- loner_li 机试题 编程遍历所有的Textbox控件 ,设置其值为空
- 遍历页面上所有TextBox控件并给它赋值为string.Empty
- php源码之遍历目录下的所有的文件
- PHP遍历一个文件夹下所有文件和子文件夹的函数