参考链接:https://blog.csdn.net/tianwei0822/article/details/88642441

一个项目由若干个任务组成,任务之间有先后依赖顺序。项目经理需要设置一系列里程碑,在每个里程碑节点处检查任务的完成情况,并启动后续的任务。现给定一个项目中各个任务之间的关系,请你计算出这个项目的最早完工时间。

输入格式:
首先第一行给出两个正整数:项目里程碑的数量 N(≤100)和任务总数 M。这里的里程碑从 0 到 N−1 编号。随后 M 行,每行给出一项任务的描述,格式为“任务起始里程碑 任务结束里程碑 工作时长”,三个数字均为非负整数,以空格分隔。

输出格式:
如果整个项目的安排是合理可行的,在一行中输出最早完工时间;否则输出"Impossible"。

输入样例 1:
9 12
0 1 6
0 2 4
0 3 5
1 4 1
2 4 1
3 5 2
5 4 0
4 6 9
4 7 7
5 7 4
6 8 2
7 8 4
输出样例 1:
18
输入样例 2:
4 5
0 1 1
0 2 2
2 1 3
1 3 4
3 2 5
输出样例 2:
Impossible

这道题和之前的一道题喊山很像,都是打标记,这道题的标记是到此点的最大距离。坑点是这道题的源点和汇点不一定是唯一的,用关键路径算法直接三个点卡掉。用拓扑排序。
和喊山不同的是,这道题打标记不管用bfs或dfs都是可以的,为什么?这是因为,对于图中的每个点(里程碑),我们要的是终态,即最大的值,没有回路(回路已经返回0输出impossible结束)就保证了这个值是惟一的,即最大值与起点无关,但喊山是有回路的,必须用bfs控制层数。AC代码:

#include <bits/stdc++.h>
using namespace std;
int n,m;
int Map[101][101],times[101],t[101];
int Top();
int main()
{memset(Map,-1,sizeof(Map));cin>>n>>m;int t1,t2,t;for (int i=0;i<m;i++){cin>>t1>>t2>>t;Map[t1][t2]=t;times[t2]++;}int judge=Top();if (judge==0){printf("Impossible\n");return 0;}printf("%d",judge);return 0;
}int Top()
{int count=0;stack<int>s;for (int i=0;i<n;i++){if (times[i]==0){s.push(i);}}int top;while (!s.empty()){top=s.top();s.pop();count++;for (int j=0;j<n;j++){if (Map[top][j]!=-1){t[j]=max(t[j],t[top]+Map[top][j]);times[j]--;Map[top][j]=-1;if (times[j]==0){s.push(j);}}}}if (count!=n){return 0;}int max=0;for (int i=0;i<n;i++){if (t[i]>t[max]){max=i;}}return t[max];
}

7-4 最短工期 (25 分)相关推荐

  1. 最短工期 (25 分)【拓扑排序模板】

    立志用最少的代码做最高效的表达 一个项目由若干个任务组成,任务之间有先后依赖顺序.项目经理需要设置一系列里程碑,在每个里程碑节点处检查任务的完成情况,并启动后续的任务.现给定一个项目中各个任务之间的关 ...

  2. 7-6 最短工期 (25 分)(C++版)

    一个项目由若干个任务组成,任务之间有先后依赖顺序.项目经理需要设置一系列里程碑,在每个里程碑节点处检查任务的完成情况,并启动后续的任务.现给定一个项目中各个任务之间的关系,请你计算出这个项目的最早完工 ...

  3. 【PAT - 甲级1003】Emergency (25分)(Dijkstra,最短路条数,双权值最短路)

    题干: As an emergency rescue team leader of a city, you are given a special map of your country. The m ...

  4. PTA 7-3 旅游规划 (25分)(双权值Dijkstra最短路)

    7-3 旅游规划 (25分) 有了一张自驾旅游路线图,你会知道城市间的高速公路长度.以及该公路要收取的过路费.现在需要你写一个程序,帮助前来咨询的游客找一条出发地和目的地之间的最短路径.如果有若干条路 ...

  5. 7-4 哈利·波特的考试 (25 分)(C语言实现)

    7-4 哈利·波特的考试 (25 分) 哈利·波特要考试了,他需要你的帮助.这门课学的是用魔咒将一种动物变成另一种动物的本事.例如将猫变成老鼠的魔咒是haha,将老鼠变成鱼的魔咒是hehe等等.反方向 ...

  6. 7-3 旅游规划 (25 分)(C语言实现)

    有了一张自驾旅游路线图,你会知道城市间的高速公路长度.以及该公路要收取的过路费.现在需要你写一个程序,帮助前来咨询的游客找一条出发地和目的地之间的最短路径.如果有若干条路径都是最短的,那么需要输出最便 ...

  7. 7-5 列车厢调度 (25 分)

    7-5 列车厢调度 (25 分) 1 ====== <--移动方向/ 3 ===== \2 ====== -->移动方向 大家或许在某些数据结构教材上见到过"列车厢调度问题&qu ...

  8. PTA 旅游规划(25 分)(图论, dijstra 变形)

    7-9 旅游规划(25 分) 有了一张自驾旅游路线图,你会知道城市间的高速公路长度.以及该公路要收取的过路费.现在需要你写一个程序,帮助前来咨询的游客找一条出发地和目的地之间的最短路径.如果有若干条路 ...

  9. PTA 07-图6 旅游规划 (25分)

    题目地址 https://pta.patest.cn/pta/test/15/exam/4/question/717 5-9 旅游规划   (25分) 有了一张自驾旅游路线图,你会知道城市间的高速公路 ...

最新文章

  1. apache配置虚拟主机(virtual host) 笔记
  2. 数据接口的登录态校验以及JWT
  3. 计算机安全专家建议:尽快为电脑升级打补丁
  4. 面向.NET开发人员的Dapr——前言
  5. Javascript数组函数库
  6. 通过mtd读写flash_flash的读写与擦除
  7. Python函数的输出
  8. android微信朋友圈相册背景,Android 仿微信朋友圈图片拖拽返回
  9. 你有必要不沾计算机一段时间英语,新目标英语八年级下第一单元知识点
  10. 一生中必看的30个故事
  11. 【创新实训】BERT4EL,基于文本相似度的实体消歧实现
  12. Web前端技术个人学习经验总结
  13. Windows文件共享防火墙规则设置
  14. 第3章第6节:如何在幻灯片中使用gif动画 [PowerPoint精美幻灯片实战教程]
  15. 情人节程序员用HTML网页表白【华丽满屏烟花-生日快乐】 HTML5七夕情人节表白网页源码 HTML+CSS+JavaScript
  16. 小米CC9 国际版使用体验
  17. 四川省食品药品学校计算机考试,【四川省食品药品学校】学费标准|分数线|招办电话|学校地址 - 高铁职业学校...
  18. Flink ReducingState 实例
  19. 秒懂 23 种设计模式!有点污,但真得秒啊...
  20. Idea 2022.1.3版本显示内存使用情况的方法

热门文章

  1. LeetCode 222. 完全二叉树的节点个数(二分查找)
  2. 数字逻辑基础与verilog设计_数字电路学习笔记(五):逻辑设计基础
  3. elasticsearch 工作原理_【154期】面试官:你能说说 Elasticsearch 查询数据的工作原理是什么吗?...
  4. TCP的2MSL问题
  5. php管道的概念,让你的php命令行程序处理管道数据
  6. python修改mac地址_python利用_winreg模块制作MAC地址修改工具
  7. 分类问题后处理技巧CAN,近乎零成本获取效果提升
  8. 剖析 Promise 之基础篇
  9. 今日头条Java后台Java研发三面题目
  10. 连载 | 知识图谱发展报告 2018 -- 前言