• [水题日常]Luogu1113 杂务


    这几天又在颓.

    我的blog难度目前还比较低,主要面向像我这样子的新手(当然内容也会尽量讲得具体清楚一些)x

    如果有错误还请指出~


    写完随笔之后才去翻了一下这题题解之后才注意到这题是有序的

    QAQ完全不用像我这么麻烦啊x


    题目链接<<

    题目大意:

    • 有n个杂务,完成每个杂务都需要一个时间,并且有的杂务需要在准备工作(就是其他的一些杂务)完成之后才能进行,求完成所有杂务的时间.
    • 互相没有关系的杂务可以同时进行.
    • n<=1e5,每个杂务的准备工作不超过100个.

    噫这应该算是经典题?(然而我今天才做x

    一开始没看到准备工作不超过一百个…(emm空间开不起啊咋办?

    然后又去看了一眼题面x日常石乐志

    • 好的我们把每个杂务看成一个有权值的点.
    • 杂务需要准备工作那就向准备工作连一条有向边.
    • 然后应该是求dag最长路?
    • 怎么求最长路啊?
    • 我也不会求啊.
    • 直接考虑求到每个点的最长路.
    • 读入的时候直接判一个杂务有没有准备工作,没有的话直接打上标记,到这个点的最长路就是这个点的权值.
    • 遍历每个点没有标记的话就记忆化dfs(跟dp差不多?
    • 这么做应该可以(反正我过了=w=

    贴代码x

    #include<cstdio>
    const int N=10005;
    const int M=1000005;
    struct edge{int to,next;}edges[M];
    int head[N],cnt;
    int n,len,ans;
    int dp[N],w[N];
    bool mark[N];
    inline int read()
    {
        int s=0;char c;while((c=getchar())<'0'||c>'9');
        do{s=s*10+c-'0';}while((c=getchar())>='0'&&c<='9');return s;
    }
    inline int max(int x,int y){return x>y?x:y;}
    inline void addEdge(int u,int v)
    {
        edges[++cnt]=(edge){v,head[u]};
        head[u]=cnt;
    }
    inline int dfs(int x)
    {
        if(mark[x])return dp[x];
        int temp=0;
        for(int i=head[x];i;i=edges[i].next)
        {
            temp=max(temp,dfs(edges[i].to));
        }mark[x]=1;
        return (dp[x]=temp+dp[x]);
    }
    int main()
    {
        n=read();
        for(int i=1;i<=n;i++)
        {
            int key,val,temp,tot=0;
            key=read();val=read();dp[key]=val;
            while(temp=read())
            {
                addEdge(key,temp);
                tot++;
            }
            if(tot==0)mark[key]=1;
        }
        for(int i=1;i<=n;i++)if(!mark[i])dfs(i);
        for(int i=1;i<=n;i++)ans=max(ans,dp[i]);
        printf("%d",ans);
        return 0;
    }
    View Magical Code~
  • 相关阅读:
    Python进阶之浅谈内置方法(补充)
    Python进阶之浅谈内置方法
    Python运算符优先级
    python之浅谈循环
    MTCNN
    MTCNN
    tf.train.batch and tf.train.shuffle_batch
    tf.add_to_collection 和 tf.get_collection 和 tf.add_n
    tensorflow 迁移学习-Demo
    tensorflow 加载预训练模型进行 finetune 的操作解析
  • 原文地址:https://www.cnblogs.com/yoshinow2001/p/7427380.html
Copyright © 2020-2023  润新知