zoukankan      html  css  js  c++  java
  • 5909. 并行课程 III

    就是一个拓扑+dp

    每次选没有入度的节点时dp一下

    dp[i]表示完成第i个节点需要的时间

    则dp[i] = max(前驱节点的dp)

    class Solution {
    public:
        vector<int> child[50010]; 
        vector<int> parent[50010];
        int in[50010];
        int vis[50010];
        int n;
        int dp[50010];
        void bfs(vector<int>& time)
        {
            memset(vis, 0, sizeof(vis));
            int max_v = -1;
            queue<int> Q;
            n = time.size();
            for(int i = 1; i <= n; i++)
            {
                if(in[i] == 0)
                {
                    Q.push(i), max_v = max(max_v, time[i - 1]);
                    dp[i] = time[i - 1];
                    vis[i] = 1;
                }        
            }
            while(!Q.empty())
            {
                int u = Q.front(); Q.pop();
                int len1 = child[u].size(), len2;
                for(int i = 0; i < len1; i++)
                {
                    int v = child[u][i];
                    in[v]--;
                    if(in[v] == 0 && vis[v] == 0)
                    {
                        len2 = parent[v].size();
                        max_v = -1;
                        for(int j = 0; j < len2; j++)
                            max_v = max(max_v, dp[parent[v][j]]);
                        dp[v] = max_v + time[v - 1];
                        Q.push(v);
                    }
                }
            }
            
            
        }
        
        int minimumTime(int n, vector<vector<int>>& relations, vector<int>& time) {
            int len1 = relations.size();
            memset(in, 0, sizeof(in));
            n = time.size();
            for(int i = 0; i < len1; i++)
            {
                child[relations[i][0]].push_back(relations[i][1]), in[relations[i][1]]++;
                parent[relations[i][1]].push_back(relations[i][0]);
            }
            bfs(time);
            int max_ret = -1;
            for(int i = 1; i <= n; i++)
                max_ret = max(max_ret, dp[i]);
            return max_ret;
            
            
        }
    };
    自己选择的路,跪着也要走完。朋友们,虽然这个世界日益浮躁起来,只要能够为了当时纯粹的梦想和感动坚持努力下去,不管其它人怎么样,我们也能够保持自己的本色走下去。
  • 相关阅读:
    所有蚂蚁掉下来前的最后一刻
    最长有效括号
    n的第k个因子--leetcode1492
    删掉一个元素以后全为1的最长子数组。
    public class和class的区别
    数据库中的乐观锁和悲观锁以及实现方式
    HashMap底层实现原理 扩容机制
    jvm 内存泄漏现象和处理方案
    Django模板标签语法
    Django图片的上传与下载
  • 原文地址:https://www.cnblogs.com/WTSRUVF/p/15451558.html
Copyright © 2011-2022 走看看