CF919D Substring (dag dp)
2024-09-05 21:51:21
解题思路
感觉这种题都是套路,首先缩点判了环(没看见自环挂了一次。。),然后设\(f[x][i]\)表示到了\(x\),\(i\)这个字母走过的最长距离,然后拓扑排序更新即可。
代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<queue>
using namespace std;
const int MAXN = 300005;
inline int rd(){
int x=0,f=1;char ch=getchar();
while(!isdigit(ch)) {f=ch=='-'?0:1;ch=getchar();}
while(isdigit(ch)) {x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}
return f?x:-x;
}
int n,m,head[MAXN],cnt,dfn[MAXN],low[MAXN],num,w[MAXN],ans;
int to[MAXN],nxt[MAXN],f[MAXN][30],stk[MAXN],top,deg[MAXN];
bool vis[MAXN],flag;
char s[MAXN];
queue<int> Q;
inline void add(int bg,int ed){
to[++cnt]=ed,nxt[cnt]=head[bg],head[bg]=cnt;
}
void tarjan(int x){
dfn[x]=low[x]=++num;stk[++top]=x;vis[x]=1;
for(register int i=head[x];i;i=nxt[i]){
int u=to[i];
if(!dfn[u]) {tarjan(u);low[x]=min(low[x],low[u]);}
else if(vis[u]) low[x]=min(low[x],dfn[u]);
}
if(low[x]==dfn[x]) {
if(stk[top]!=x) {flag=1;return;}
top--;vis[x]=0;
}
}
int main(){
n=rd(),m=rd();int x,y;
scanf("%s",s+1);
for(int i=1;i<=n;i++) w[i]=s[i]-'a'+1;
for(int i=1;i<=m;i++){
x=rd(),y=rd();deg[y]++;
if(x==y) flag=1;
add(x,y);
}
for(int i=1;i<=n;i++) if(!dfn[i]) tarjan(i);
if(flag) {puts("-1");return 0;}
else{
for(int i=1;i<=n;i++) if(!deg[i]) Q.push(i),f[i][w[i]]=1;
while(Q.size()){
int x=Q.front();Q.pop();
for(register int i=head[x];i;i=nxt[i]){
int u=to[i];
f[u][w[u]]=max(f[u][w[u]],f[x][w[u]]+1);
for(int k=1;k<=26;k++) if(w[u]!=k) f[u][k]=max(f[u][k],f[x][k]);
deg[u]--;if(!deg[u]) Q.push(u);
}
if(!head[x]) for(int i=1;i<=26;i++) ans=max(ans,f[x][i]);
}
}
printf("%d\n",ans);
return 0;
}
最新文章
- webSphere内存溢出
- [转载]再来重新认识JavaEE完整体系架构
- Google V8编程详解(四)Context
- 一个java页游服务器框架
- Beta版本冲刺———第一天
- ArcGIS Server 10.1 for Linux典型问题总结
- 基于Spring的可扩展Schema进行开发自定义配置标签支持
- HTML5 的 applicationCache 应用程序缓存离线存储功能与 manifest 文件
- sql server Convert 的函数的用法 转换成浮点数
- C# Best Practices - Define Fields Appropriately
- hdu 1240 Asteroids!(BFS)
- pragma once与#ifndef的作用有什么区别
- panda库------对数据进行操作---合并,转换,拼接
- scrapy分布式的几个重点问题
- MYSQL手册
- CF1101F Trucks and Cities
- 批量 kill mysql 线程
- springboot 多环境配置yml或properties
- [LeetCode] 42. Trapping Rain Water_hard tag: Two Pointers
- linux下补丁制作及打补丁实例【转】
热门文章
- etc/profile /etc/bashrc ~/.bash_profile ~/.bashrc等配置文件区别
- python的magic methods
- 【单调队列优化】[CF372C] Watching Fireworks is Fun
- Effective C++之条款2:尽量以const enum inline替换 #define
- [转]Netty入门(最简单的Netty客户端/服务器程序)
- leetcode-两个数组交集(包含重复元素)
- redis集群报错:(error) MOVED 5798 127.0.0.1:7001
- Jmeter-【beanshell处理器】-随机获取手机号
- CSS盒模型及应用
- 判断访问浏览器客户端类型(pc,mac,ipad,iphone,android)