您的位置:首页 > 其它

poj 1949——Chores

2014-07-13 11:38 239 查看
题意:给出一些要做的事情,每件事情做之前需要完成另外一些事情才能做。求完成所有事情需要的最短时间。

思路:第一眼看上去像拓扑排序,但是题目中说第K件事需要提前完成的事情一定在1到K-1之间。endtime[i]=max(endtime[i],endtime[j]+lasttime[i]),其中j是做i需要提前完成的事情。

代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
using namespace std;

const int maxn=10005;

int endtime[maxn];
int lasttime[maxn];
vector<int> pre[maxn];

int main(){
 //   freopen("data.txt","r",stdin);
    int n;
    scanf("%d",&n);
    for(int i=1;i<=n;++i)
    {
        scanf("%d",&lasttime[i]);
        endtime[i]=lasttime[i];
        int c;
        scanf("%d",&c);
        for(int j=0;j<c;j++)
        {
            int d;
            scanf("%d",&d);
            pre[i].push_back(d);
        }
    }
    int ans=endtime[1];
    for(int i=2;i<=n;++i)
    {
        for(int j=0;j<pre[i].size();++j)
        {
            endtime[i]=max(endtime[i],endtime[pre[i][j]]+lasttime[i]);
        }
        ans=max(ans,endtime[i]);
    }
 printf("%d\n",ans);
    return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: