首页 > 编程语言 > 详细

P1113 杂务(拓扑排序)

时间:2020-05-19 14:57:33      阅读:75      评论:0      收藏:0      [点我收藏+]

https://www.luogu.com.cn/problem/P1113

给一些工作的消耗时间,和完成这些工作必须的准备工作。求完成的最少时间。

把数据建模,转化为dag,拓扑排序完事。(循环次数还是用for循环吧,用while把n减成0,debug了好久,哭了)

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e4+5;
vector<int>v[maxn];
int cost[maxn];
int indge[maxn];
int dp[maxn];
int n,a,b,c,d;
queue<int>q;
void topsort()
{
    while(!q.empty())q.pop();
    for(int i=1;i<=n;i++){
        if(indge[i]==0){
            q.push(i);
            dp[i]=cost[i];
        }
    }
    while(!q.empty()){
        int k=q.front();
        q.pop();
        for(int i=0;i<v[k].size();i++){
            if(--indge[v[k][i]]==0)q.push(v[k][i]);
            dp[v[k][i]]=max(dp[k]+cost[v[k][i]],dp[v[k][i]]);
        }
    }
}
int main()
{
    cin>>n;
    fill(dp,dp+maxn,0);
    fill(cost,cost+maxn,0);
    fill(indge,indge+maxn,0);
    for(int o=1;o<=n;o++){
        cin>>a>>b;
        cost[a]=b;
        cin>>c;
        while(c!=0){
            v[c].push_back(a);
            cin>>c;
            indge[a]++;
        }
    }
    topsort();int maxx=-1;
    for(int i=1;i<=n;i++){
         maxx=max(dp[i],maxx);
    }
    cout<<maxx<<endl;
    return 0;
}

 

P1113 杂务(拓扑排序)

原文:https://www.cnblogs.com/mohari/p/12916889.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!