Instructions Arrangement

本题事件(顶点)为事件结束。方便求最短完成时间,即关键路径长度。
#include<bits/stdc++.h>
using namespace std;

const int Max=1000+10;
const int INF=INT_MAX;

struct Edge{
    int to;
    int l;
    Edge(int x,int y):to(x),l(y){}
};

vector<Edge> graph[Max];
int ve[Max];
int vl[Max];
int indegree[Max];

void CritialPath(int n){
    vector<int> topology;
    queue<int> node;
    for(int i=0;i<n;i++){
        if(indegree[i]==0){
            node.emplace(i);
            ve[i]=1;                           //度为0的点为实际源点,顶点代表事件结束,所以初始化为1 !!
        }
    }
    while(!node.empty()){
        int u=node.front();
        topology.emplace_back(u);
        node.pop();
        for(int i=0;i<graph[u].size();i++){
            int v=graph[u][i].to;
            int d=graph[u][i].l;
            ve[v]=max(ve[v],ve[u]+d);
            indegree[v]--;
            if(indegree[v]==0){
                node.emplace(v);
            }
        }
    }
}

int main(){
    int n,m;
    while(cin>>n>>m){
        for(int i=0;i<m;i++){
            int from,to,l;
            cin>>from>>to>>l;
            graph[from].emplace_back(Edge(to,l));
            indegree[to]++;
        }
        CritialPath(n);
        int answer=0;
        for(int i=0;i<n;i++){
            answer=max(answer,ve[i]);
        }
        cout<<answer<<endl;
    }
    return 0;
}
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-09 12:11
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
今天 17:17
点赞 评论 收藏
分享
零OFFER战士:另一个版本查看图片
点赞 评论 收藏
分享
Lorn的意义:你这种岗位在中国现在要么牛马天天加班,要么关系户进去好吃好喝,8年时间,真的天翻地覆了,对于资本来说你就说一头体力更好的牛马,哎,退伍没有包分配你真的亏了。
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-09 12:20
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务