zoukankan      html  css  js  c++  java
  • PTA最短工期

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

    输入格式:

    首先第一行给出两个正整数:项目里程碑的数量 N(100)和任务总数 M。这里的里程碑从 0 到 N1 编号。随后 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

    解题思路:拓扑排序+更新距离。
    菜鸡的成长史 ^_^
     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 const int N=1e5+5,INF=0x3f3f3f3f;
     4 int n,m,num;
     5 int in[N],dis[N];
     6 vector<pair<int,int> >G[N];
     7 int Sorttop()
     8 {
     9     queue<int>que;
    10     num=0;
    11     for(int i=0;i<n;i++)
    12         if(!in[i]) que.push(i);  //入度点为0的点入队列
    13     while(!que.empty())
    14     {
    15         int u=que.front(),v,w;que.pop();
    16         num++;
    17         for(auto X:G[u])
    18         {
    19             v=X.first,w=X.second;
    20             if(--in[v]==0) que.push(v);  //如果入度为0则入队列
    21             dis[v]=max(dis[v],dis[u]+w);  //这个点之前的任务必须全部都完成,所以要max
    22         }
    23     }
    24     if(num==n) return 1;
    25     else return 0;
    26 }
    27 
    28 int main()
    29 {
    30     ios::sync_with_stdio(false);
    31     cin>>n>>m;
    32     memset(in,0,sizeof(in)); //入度
    33     for(int i=1,d1,d2,d3;i<=m;i++){
    34         cin>>d1>>d2>>d3;
    35         G[d1].push_back({d2,d3});
    36         in[d2]++;
    37     }
    38     int flag=Sorttop();
    39     if(flag==0) cout << "Impossible";
    40     else
    41     {
    42         int minn=0;
    43         for(int i=0;i<n;i++) minn=max(minn,dis[i]);  //最长的就是最早完工时间
    44         cout << minn;
    45     }
    46     cout << endl;
    47     return 0;
    48 }
    View Code
  • 相关阅读:
    English Sentenses【no use】
    MacOS显示和不显示隐藏文件
    各个会议期刊论文录取情况
    C++之linux下文件结构实现
    Ubuntu安装opencv
    tmux使用
    事件的默认行为 与 事件流
    currentTarget 与 Target 的区别
    元数据标签Embed
    fl,flash,mx包的区别
  • 原文地址:https://www.cnblogs.com/qq-1585047819/p/10617165.html
Copyright © 2011-2022 走看看