HELLO WORLD--一起加油(🍺)!|

kingwzun

园龄:3年6个月粉丝:111关注:0

7-7 最短工期 (25 分)

题目解析

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

代码:

#include <bits/stdc++.h>
using namespace std;
int dis[105][105], ru[105], f[105];
int n, ans, cnt = 0;
void Tsort(){
while(1){
int flag=1;
for(int i=0;i<n;i++){
if(!ru[i]){//if(ru[i]==0)
ru[i]--;
cnt++;
flag=0;
for(int j=0;j<n;j++){
if(dis[i][j]!=-1){
ru[j]--;
f[j]=max(f[j],f[i]+dis[i][j]);//里程碑的需要指向里程碑的任务全部完成,故需要时间最长的路径
ans=max(f[j],ans);//如果能完成工程,总时间最长的那条路径,一定遍历全部结点的路径
}
}
}
}
if(flag==1) break;
}
if(cnt==n) cout<<ans<<endl;
else cout<<"Impossible"<<endl;
}
int main()
{
int m;
cin >> n >> m;
memset(dis, -1, sizeof dis);
while (m--)
{
int p, x, y;
cin >> x >> y >> p;
dis[x][y] = p;
ru[y]++;
}
Tsort();
return 0;
}

本文作者:kingwzun

本文链接:https://www.cnblogs.com/kingwz/p/15590316.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   kingwzun  阅读(582)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起