https://www.luogu.org/problemnew/show/P1434

有向图的最长链怎么求?有环肯定不行,这里保证无环。(否则应该使用toposort先求出所有不带环的位置)

设dp[u]=以u点开始的最长链的长度,那么以u为子节点的v就有dp[v]=max(dp[v],dp[u]+1),遍历其每个子节点就可以得知其最长链。

所以最简单的方法其实是记忆化搜索。

第一次完全手写前向星版本的dfs。

#include<bits/stdc++.h>
using namespace std;
#define ll long long int g[][]; int head[];
struct Edge{
int v,nxt;
Edge(int v=,int nxt=):v(v),nxt(nxt){}
}edge[*]; int indeg[];
int etop=;
void addedge(int u,int v){
edge[etop].v=v;
edge[etop].nxt=head[u];
indeg[v]++;
head[u]=etop++;
} int n,m; int dp[];
int dfs(int id){
if(dp[id]!=-)
return dp[id];
else{
int res=;
for(int i=head[id];i!=-;i=edge[i].nxt){
res=max(res,dfs(edge[i].v));
}
res++;
return dp[id]=res;
}
} int main(){
scanf("%d%d",&n,&m);
memset(g,0x3f,sizeof(g));
memset(head,-,sizeof(head));
memset(dp,-,sizeof(dp));
for(int i=;i<=n;i++){
for(int j=;j<=m;j++){
scanf("%d",&g[i][j]);
}
} for(int i=;i<=n;i++){
for(int j=;j<=m;j++){
if(g[i][j]>g[i-][j]){
addedge((i-)*m+j,(i-)*m+j);
}
if(g[i][j]>g[i+][j]){
addedge((i-)*m+j,(i)*m+j);
}
if(g[i][j]>g[i][j-]){
addedge((i-)*m+j,(i-)*m+j-);
}
if(g[i][j]>g[i][j+]){
addedge((i-)*m+j,(i-)*m+j+);
}
}
} int ans=;
for(int i=;i<=n;i++){
for(int j=;j<=m;j++){
if(indeg[(i-)*m+j]==){
ans=max(ans,dfs((i-)*m+j));
}
}
} printf("%d\n",ans); }

最新文章

  1. java学习第三天 数组
  2. js面向对象笔记
  3. css3很酷的加载动画多款
  4. IOS网络第一天-01基本的HTTP请求
  5. apache AddDefaultCharset
  6. HBase(二): c#访问HBase之股票行情Demo
  7. sbt设置
  8. CSS3最简洁的轮播图
  9. python3 第八章 - 完善九九乘法表
  10. error_reporting
  11. 谈一谈泛型(Generic)
  12. SpringBoot介绍
  13. SCRUM 12.21
  14. operator的itemgetter和attrgetter
  15. 如何给oracle账户解锁
  16. Expo大作战(十三)--expo如何自定义状态了statusBar以及expo中如何处理脱机缓存加载 offline support
  17. 我们的团队-IT梦想队
  18. Java 调用 PHP 实例(五)
  19. js的prototype(2)
  20. HC-07 蓝牙串口模块

热门文章

  1. PostgreSQL触发器的使用
  2. 【转载】一分钟了解两阶段提交2PC(运营MM也懂了)
  3. Java经常使用类及其经常用法
  4. HDU 3065 病毒侵袭持续中(AC自己主动机)
  5. Fairy Tail - Main Theme Slow Version guitar (solo)
  6. 图像处理之基础---ffmpeg 中的图像缩放
  7. WPF新手之如何将数据绑定到TreeView
  8. 应用require.js进行javascript模块化编程小试一例
  9. ExtJs4.2 开发问题总结
  10. Spring中的AOP(学习笔记)