DAG:有向无环图

1.求整个DAG中的最长路径(即:不固定终点和起点)

2.固定终点,求DAG中的最长路径

问题1

给定一个有向无环图,如何求解整个图的所有路径中权值之和最大的那条

令:dp[i]表示从i号顶点出发能获得的最长路径长度。dp[i]的最大值即是DAG的最长路径长度
dp[i]=max{
    dp[j]+length(i->j)
}

j是i的所有直接后继

#include<iostream>
#include<cstring>
using namespace std;const int N=100;
int dp[N],G[N][N];
int n,choose[N];int DP(int i){if(dp[i]>0) return dp[i];for(int j=0;j<n;j++){if(G[i][j]!=0){int temp=DP(j)+G[i][j];if(temp>dp[i]){dp[i]=temp;choose[i]=j;//在最长路径中更新i的后继是j}}}return dp[i];
}void printPath(int i){//i是最大dp[i]的下标cout<<i;while(choose[i]!=-1){//初始化-1  d到-1说明到头了i=choose[i];//巧妙往前走了一步cout<<"->"<<i;//输出i不是chosoe[i] 已经复制给i了}cout<<endl;
}int main(){freopen("input2.txt","r",stdin);//领接矩阵存储while(cin>>n){memset(dp,0,sizeof(dp));memset(choose,-1,sizeof(choose));for(int i=0;i<n;i++){for(int j=0;j<n;j++){cin>>G[i][j];//0代表不通}}int max=0;DP(max);for(int i=1;i<n;i++){if(dp[max]<DP(i)) max=i;}printf("长度:%d\n路径:",dp[max]);printPath(max);}return 0;
}

测试用例:

问题二;

dp[i]表示从i号顶点出发到终点T能获得最长路径

边界dp[T]=0               dp[i]初始化为-INF

#include<iostream>
#include<cstring>
using namespace std;const int N=100;
const int INF=-INT_MAX;
int dp[N],G[N][N];
int n,choose[N];
bool vis[N];int DP(int i){if(vis[i]) return dp[i];vis[i]=true;for(int j=0;j<n;j++){if(G[i][j]!=INF){dp[i]=max(dp[i],DP(j)+G[i][j]);choose[i]=j;}}return dp[i];
}void printPath(int i){//i是最大dp[i]的下标cout<<i;while(choose[i]!=-1){//初始化-1  d到-1说明到头了i=choose[i];//巧妙往前走了一步cout<<"->"<<i;//输出i不是chosoe[i] 已经复制给i了}cout<<endl;
}int main(){freopen("input2.txt","r",stdin);//领接矩阵存储// cout<<INF<<endl;while(cin>>n){memset(dp,0,sizeof(dp));memset(choose,-1,sizeof(choose));memset(vis,0,sizeof(vis));//bool型初始化0  0==falsefor(int i=0;i<n;i++){for(int j=0;j<n;j++){cin>>G[i][j];//0代表不通或者到自己if(G[i][j]==0) G[i][j]=INF;}}//★★int T;cin>>T;dp[T]=0;vis[T]=true;int max=0;DP(max);for(int i=1;i<n;i++){if(dp[max]<DP(i)) max=i;}printf("以%d为终点\n",T);printf("最大路径长度:%d\n路径:",dp[max]);printPath(max);cout<<endl;}return 0;
}

11.6 DAG最长路相关推荐

  1. POJ - 3160 Father Christmas flymouse DAG最长路

    又来做这一道缩点的裸题,发现图转化为DAG后明显是一个最长路,那么有没有固定都求法呢,查询资料后发现的确是一种固定的做法. DAG最长路,分为两种固定终点和不固定终点. 令dp[i]表示从i顶点出发能 ...

  2. 【EOJ Monthly 2019.02 - E】中位数(二分 ,中位数 ,−1/1变换,dp求解DAG最长路)

    题干: E. 中位数 单测试点时限: 10.0 秒 内存限制: 256 MB "你的地图是一张白纸,所以即使想决定目的地,也不知道路在哪里." QQ 小方最近在自学图论.他突然想出 ...

  3. DAG最长路(最短路)

    DAG就是有向无环图. DAG上的最长或者最短路是很重要的一类问题.很多问题都可以转化为DAG上的最长或者最短路径的问题.DAG求最短和最长路的方法一样. 本算法主要解决2个问题 1)求整个DAG中的 ...

  4. UVA 103 Stacking Boxes 套箱子 DAG最长路 dp记忆化搜索

    题意:给出几个多维的箱子,如果箱子的每一边都小于另一个箱子的对应边,那就称这个箱子小于另一个箱子,然后要求能够套出的最多的箱子. 要注意的是关系图的构建,对箱子的边排序,如果分别都小于另一个箱子就说明 ...

  5. 【POJ - 3160】Father Christmas flymouse(Tarjan缩点,DAG最长路)

    题干: After retirement as contestant from WHU ACM Team, flymouse volunteered to do the odds and ends s ...

  6. 计蒜客-2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛H题Skiing(拓扑序求DAG最长路)

    题意: 给定一个有向无环图,求该图的最长路. 思路: 由于是有向无环图,所以最长路肯定是一个入度为0到出度为0的路径,拓扑序在确定当前点之前能够考虑到所有到它的情况,所以最后取个最值即可. 代码: # ...

  7. DAG最长路问题 hdu-1224

    用DFS+记忆化写了一下,拓扑排序+DP的我还没弄明白.据说Codeforces 721C就是这类题目,因为有费用限制,DFS不太好写,有时间把DP法想明白来. #include <iostre ...

  8. nyoj 10 skiing(DAG上的最长路,备忘录方法)

    skiing 时间限制:3000 ms  |  内存限制:65535 KB 难度:5 描述 Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑 ...

  9. (dag模型+最长路+字典序)嵌套矩形

    题目: 有 n 个矩形,每个矩形可以用两个整数 a, b 描述,表示它的长和宽.矩形 X(a, b) 可以嵌套在矩形 Y(c, d) 中当且仅当 a<c, b<d,或者 b<c, a ...

最新文章

  1. Python的语言特点
  2. 微软表示Edge的性能更优于Chrome和Firefox
  3. C语言及程序设计初步例程-33 三种循环语句
  4. 天津大学计算机学院院长及副院长,李晓红 教授
  5. deepin系统转为windows_windows系统下安装深度系统deepin
  6. 花生采摘(洛谷-P1086)
  7. android Launcher——数据加载与变更
  8. 【FinalShell】win10 / win 11:远程连接 Linux 工具 FinalShell 下载、安装
  9. 产业分析:2021抖音数据报告
  10. “某某云词典” – 纠结的初体验
  11. 相机镜头光学中的一些疑难问题的解释
  12. python制作购物秒杀脚本,以淘宝秒杀脚本为例!
  13. java.io.FileNotFoundException: class path resource [com/wisely/highlight_spring4/ch2/aware/text.txt]
  14. 如何让文字变成语音?推荐三个免费把文字变成音频软件
  15. 宝塔面板分析网站蜘蛛日志?
  16. 京东2015校园招聘技术类笔试题
  17. VMwear虚拟机安装动态网卡和静态网卡(Basic Service版)
  18. hdu 1210 Eddy's 洗牌问题
  19. 51单片机入门教程_LED篇
  20. 点列图、横向像差、径向像差、畸变

热门文章

  1. 肥宅有理?大数据帮你找到不去健身房的原(jie)因(kou)
  2. 前言报告:中科院心理所朱廷劭——基于人工智能技术的心理识别与干预
  3. 2023年山东最新水利水电施工安全员模拟试题及答案
  4. 求质数的java算法
  5. CAA中选择对象(元素)类型
  6. 小知识:教你认识N种手机“彩屏”IT168索尼爱立信论坛
  7. C语言中的signed和unsigned的使用以及整型提升一探究竟
  8. EasyTouch_简单触控
  9. 悟空问答赚钱副业项目,操作的好可月入10000+
  10. 一位博士生选择自杀,在论文中了顶会之后