题目描述

一个无环的有向图称为无环图(Directed Acyclic Graph),简称DAG图。 
    AOE(Activity On Edge)网:顾名思义,用边表示活动的网,当然它也是DAG。与AOV不同,活动都表示在了边上,如下图所示:
                                     
    如上所示,共有11项活动(11条边),9个事件(9个顶点)。整个工程只有一个开始点和一个完成点。即只有一个入度为零的点(源点)和只有一个出度为零的点(汇点)。
    关键路径:是从开始点到完成点的最长路径的长度。路径的长度是边上活动耗费的时间。如上图所示,1 到2 到 5到7到9是关键路径(关键路径不止一条,请输出字典序最小的),权值的和为18。

输入

    这里有多组数据,保证不超过10组,保证只有一个源点和汇点。输入一个顶点数n(2<=n<=10000),边数m(1<=m <=50000),接下来m行,输入起点sv,终点ev,权值w(1<=sv,ev<=n,sv != ev,1<=w <=20)。数据保证图连通。

输出

    关键路径的权值和,并且从源点输出关键路径上的路径(如果有多条,请输出字典序最小的)。

示例输入

  1. 9 11
  2. 1 2 6
  3. 1 3 4
  4. 1 4 5
  5. 2 5 1
  6. 3 5 1
  7. 4 6 2
  8. 5 7 9
  9. 5 8 7
  10. 6 8 4
  11. 8 9 4
  12. 7 9 2

示例输出

  1. 18
  2. 1 2
  3. 2 5
  4. 5 7
  5. 7 9
  6.  
  7. 好久做过的题了,不过今天拿出来看看觉得这个题挺好,它是逆向建图和打印路径,求最长路径;
    最长路径用SPFA求解,但注意初始化为最小。
  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<iostream>
  4. #include<queue>
  5. #include<vector>
  6. using namespace std;
  7.  
  8. const int INF = 0x3f3f3f3f;
  9. const int MAX = ;
  10.  
  11. struct edge
  12. {
  13. int to,w;
  14. };
  15.  
  16. struct node
  17. {
  18. int indegree;
  19. int outdegree;
  20. }V[MAX+];
  21.  
  22. int n,m;
  23. int inque[MAX+],dis[MAX+];
  24. int pre[MAX+];
  25. vector<edge>map[MAX+];
  26.  
  27. void spfa(int s)
  28. {
  29. queue<int>que;
  30. memset(inque,,sizeof(inque));
  31. for(int i = ; i <= n; i++)
  32. dis[i] = -INF;//注意初始化
  33. dis[s] = ;
  34. que.push(s);
  35. inque[s] = ;
  36. while(!que.empty())
  37. {
  38. int u = que.front();
  39. que.pop();
  40. inque[u] = ;
  41. for(int i = ; i < map[u].size(); i++)
  42. {
  43. int to = map[u][i].to;
  44. if(dis[u] > -INF && (dis[to] < map[u][i].w + dis[u] || (dis[to] == map[u][i].w + dis[u] && u < pre[to])))
  45. {
  46. dis[to] = map[u][i].w + dis[u];
  47. pre[to] = u;
  48. if(inque[to] == )
  49. {
  50. que.push(to);
  51. inque[to] = ;
  52. }
  53. }
  54. }
  55. }
  56. }
  57.  
  58. int main()
  59. {
  60. int u,v,w,s,t;
  61. while(~scanf("%d %d",&n,&m))
  62. {
  63. memset(pre, 0x3f, sizeof(pre));
  64. for(int i = ; i <= n; i++)
  65. map[i].clear();
  66. for(int i = ; i <= n; i++)
  67. {
  68. V[i].indegree = ;
  69. V[i].outdegree = ;
  70. }
  71. for(int i = ; i <= m; i++)
  72. {
  73. //逆向建图
  74. scanf("%d %d %d",&u,&v,&w);
  75. map[v].push_back((struct edge){u, w});
  76. V[v].outdegree++;
  77. V[u].indegree++;
  78. }
  79. for(int i = ; i <= n; i++)
  80. {
  81. if(V[i].indegree == )
  82. s = i;
  83. if(V[i].outdegree == )
  84. t = i;
  85. }
  86. spfa(s);
  87. printf("%d\n",dis[t]);
  88. int x = t;
  89. //打印路径
  90. while(x != s)
  91. {
  92. printf("%d %d\n", x, pre[x]);
  93. x = pre[x];
  94. }
  95. }
  96. return ;
  97. }
  1.  

AOE网上的关键路径(最长路径 + 打印路径)的更多相关文章

  1. SDUT 2498 AOE网上的关键路径

    AOE网上的关键路径 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description 一个无环的有向图称为无 ...

  2. sdut AOE网上的关键路径(spfa+前向星)

    http://acm.sdut.edu.cn/sdutoj/showproblem.php?pid=2498&cid=1304 题目描述 一个无环的有向图称为无环图(Directed Acyc ...

  3. 数据结构实验之图论十一:AOE网上的关键路径【Bellman_Ford算法】

    Problem Description 一个无环的有向图称为无环图(Directed Acyclic Graph),简称DAG图.     AOE(Activity On Edge)网:顾名思义,用边 ...

  4. SDUTOJ 2498 数据结构实验之图论十一:AOE网上的关键路径

    题目链接:http://acm.sdut.edu.cn/onlinejudge2/index.php/Home/Index/problemdetail/pid/2498.html 题目大意 略. 分析 ...

  5. sdut 2498【aoe 网上的关键路径】

    http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2498 代码超时怎么破: #include< ...

  6. SDUT 2498-AOE网上的关键路径(spfa+字典序路径)

    AOE网上的关键路径 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描写叙述 一个无环的有向图称为无环图(Directed Acycl ...

  7. SDUT-2498_AOE网上的关键路径

    数据结构实验之图论十一:AOE网上的关键路径 Time Limit: 2000 ms Memory Limit: 65536 KiB Problem Description 一个无环的有向图称为无环图 ...

  8. zoj 3088 Easter Holidays(最长路+最短路+打印路径)

    Scandinavians often make vacation during the Easter holidays in the largest ski resort Are. Are prov ...

  9. 最长公共子序列Lcs(打印路径)

    给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的).   比如两个串为:   abcicba abdkscab   ab是两个串的子序列,abc也是,abca也是,其中abca是这 ...

随机推荐

  1. [转] 在React Native中使用ART

    http://bbs.reactnative.cn/topic/306/%E5%9C%A8react-native%E4%B8%AD%E4%BD%BF%E7%94%A8art 前半个月捣腾了一下Rea ...

  2. [转] Scale-up 和Scale-out的区别

    http://www.cnblogs.com/spork/archive/2009/12/29/1634766.html 来自原小站,曾经迷糊过的东西,表上来,希望对正在迷糊或即将迷糊的人有帮助. 谈 ...

  3. Java实现对文件的上传下载操作

    通过servlet,实现对文件的上传功能 1.首先创建一个上传UploadHandleServlet ,代码如下: package me.gacl.web.controller; import jav ...

  4. ActionScript:Resampling PCM data

    使用基于flash的麦克风录音,如果想在获取完PCM采样数据后,通过Sound马上回放,必须经过resampling.(注意:如果录音是采用的44KHz的话,则不需要) 因此,需要as实现一个简便的函 ...

  5. 同一台电脑上安装两个tomcat服务器

    1.下载免安装版tomcat,解压成tomcat1.tomcat2: 2.修改tomcat2中conf下server.xml文件如下: <Server port="8005" ...

  6. iOS 8 Handoff 开发指南

    (原文:Working with Handoff in iOS 8 作者:Gabriel Theodoropoulos 译者:半圆圆) 我想用下面这一个美妙的场景来开始这篇教程:假象一下你正在Mac上 ...

  7. iOS app闪退的一般原因

    1.函数无限递归爆栈(表视图返回Cell和返回行高的方法互相调用)2.某对象无法解析某个方法(没做类型转换.或者代理没实现某个方法)3.访问了某个已经被释放的对象(ARC之后不太有)4.从Bundle ...

  8. UITableViewCell 添加长按手势

    UILongPressGestureRecognizer *lpgr = [[UILongPressGestureRecognizer alloc] initWithTarget:self actio ...

  9. Swift中可选类型(Optional)的用法 以及? 和 ! 的区别 (转载博客,知识分享)

    本文转载自:代码手工艺人的博客,原文名称:Swift之 ? 和 ! Swift语言使用var定义变量,但和别的语言不同,Swift里不会自动给变量赋初始值,也就是说变量不会有默认值,所以要求使用变量之 ...

  10. [转]Delphi Form的释放和隐藏:free,hide,close

    form.Free - 释放Form占用的所有资源.Free后,Form指针不能再使用,除非对Form重新赋值. form.Hide - 隐藏Form.可以调用form.Show再一次显示. form ...