首页 > 其他分享 >PTA-ch7b-5 : 最小工期

PTA-ch7b-5 : 最小工期

时间:2023-11-26 22:55:06浏览次数:31  
标签:qq int 任务 PTA ++ 工期 ch7b include 里程碑

最小工期

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

输入格式:
首先第一行给出两个正整数:项目里程碑的数量 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

MYCODE

#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>

using namespace std;

const int maxv = 100;

int main() {
    int n, m;
    cin >> n >> m;
    vector<vector<int>> g(n);
    vector<vector<int>> val(n); // 边的权值
    int in[maxv] = {0};
    for (int i = 0; i < m; i++) {
        int a, b, w;
        cin >> a >> b >> w;
        g[a].push_back(b);
        val[a].push_back(w);
        in[b]++;
    } // 图的初始化

    vector<int> ear(n); // 每个节点的最早访问时间
    queue<int> qq;
    int cnt = 0;
    // 拓扑排序
    for (int i = 0; i < n; i++) {
        if (in[i] == 0) qq.push(i);
    } // 找顶点
    while (!qq.empty()) {
        int u = qq.front();
        qq.pop();
        cnt++; // 计算路径中的节点数量
        for (int i = 0; i < g[u].size(); i++) {
            int v = g[u][i];
            in[v]--;
            ear[v] = max(ear[v], ear[u] + val[u][i]);
            if (in[v] == 0) {
                qq.push(v);
            }
        }
    }

    if (cnt < n) {
        cout << "Impossible" << endl;
        return 0;
    }
    int ans = 0; // 最后的结果
    for (int i = 0; i < n; i++) {
        int v = ear[i];
        ans = max(ans, v);
    }
    cout << ans << endl;
    return 0;
}

标签:qq,int,任务,PTA,++,工期,ch7b,include,里程碑
From: https://www.cnblogs.com/LeeTsFungRichard/p/17858150.html

相关文章

  • 第八章iptables防火墙
    安装iptables服务保存不上,可能没安装iptables服务yuminstalliptables-services.x86_64关闭防火墙systemctlstopfirewalldsystemctlmaskfirewalld2安装iptables服务yuminstalliptables-services3设置iptables服务开机启动systemctlenableiptables4重启iptab......
  • Docker启动失败,提示"iptables: No chain/target/match by that name"
    一、问题现象docker容器报错:docker:Errorresponsefromdaemon:driverfailedprogrammingexternalconnectivityonendpointetlmysql(12ccdbcef942bef6f32dbfc157dd1b49319ee2df4d68bf7b9a9b9ea88b5bd4fa):(iptablesfailed:iptables--wait-tnat-ADOCKER-ptc......
  • linux iptables初步理解
    引用:https://www.bilibili.com/video/BV1Jz4y1u7Lz/?spm_id_from=333.788&vd_source=e05f4a55dd5d8e27f74472aa7fd97ace1.iptables处理模型:linux内核有一个netfilter框架来设置这个防火墙linux可以像路由器一样做转发处理的,所以流量处理就有如下路径:iptables有四......
  • firewalld与iptables区别
    ComparisonofFirewalldtosystem-config-firewallandiptablesTheessentialdifferencebetweenfirewalldandiptablesserviceare:Theiptablesservicestoresconfigurationin/etc/sysconfig/iptableswhilefirewalldstoresitinvariousXMLfilesin/u......
  • PTA题目集4、5、6以及期中考试的总结
    一、前言在过去做完的PTA题目集4、5、6以及期中考试,相比前几次的题目集来说难度都相对提高了许多,对于基础相对比较薄弱的我做起来也比较吃力,但是题量比之前都少了很多,后两次题目集都只有菜单计价程序一题,最主要的也还是菜单计价程序这一类题目,代码量很大。这类题目对于类的考察......
  • pta博客二
    前言在这次pta题目集4~6中,我们有了前三次基础java作业的基础,正式开始对java实验的进阶,其中的菜单计价程序的难度逐渐增大,第五次和第六次pta作业都是在第四次作业菜单计价程序-三上进行添加的,难度有点大。在这三次题目集当中,因为对于java函数的使用不算熟练,有些函数实现的代码还......
  • PTA4-6、期中考试总结Blog-2
    本次Blog是针对Java程序设计的PTA题目集4-6以及期中考试的总结。一、前言:题目集4共四道题,包括菜单计价系列题目两道、单词统计与排序、 判断两个日期的先后,计算间隔天数、周数。题目难度适中,其中菜单计价2-3难度较大。考察的主要是正则表达式运算、哈希表的运用等。题目集5只有......
  • PTA题目集4、5、6以及期中考试的总结性Blog
    一.前言    大三上学期开始,我们开始接触java这门语言,Java具有大部分编程语言所共有的一些特征,被特意设计用于互联网的分布式环境。Java具有类似于C++语言的形式和感觉,但它要比C++语言更易于使用,而且在编程时彻底采用了一种以对象为导向的方式。    pta已经写了六......
  • PTA题目集4、5、6以及期中考试的总结性Blog
    第二次博客一、前言​ 对于PTA题目集4.5.6都是对于菜单题目的不断迭代,难度也是越来越高,对于第四次pta第三题也就是菜单二中main函数代码还是很少的,到了菜单三中的一下关键的逻辑代码就放到了主函数中,到后面不断的迭代主函数的内容也是在不断地增加。还是在类设计方面没有做的很......
  • PTA4、5、6及期中考试总结
    本次是第二次博客,主要的习题是pta4、5、6以及期中考试,pta的题目主要是延续了之前的菜单题目,相较于之前的菜单增加了许多功能如增加桌号,增加时间,增加了特色菜,增加删除某条记录等,期中考试的题目则是选择题加上大题目,选择题是对Java的一些基础知识的考察,大题目主要考察了类的设计,继承......