zoukankan      html  css  js  c++  java
  • Luogu P1113 杂务

    解题思路

    不难看出,在所有给定的关系中存在着时间上的先后顺序,那么就会想到用拓扑排序进行求解,在拓扑排序的同时将时间线上最后完成的点记录下来。这就是答案

    附上代码

    #include <iostream>
    #include <cstdio>
    #include <queue>
    
    using namespace std;
    
    const int maxn = 1e4+3;
    int n, t[maxn], x, indgr[maxn], cnt[maxn], dis[maxn][103], fin[maxn], Ans;
    queue<int> Q;
    
    int main() {
        scanf("%d", &n);
        for(int i=1; i<=n; i++) {
            scanf("%d", &i);
            scanf("%d", &t[i]);
            while (scanf("%d", &x) == 1) {
                if(x == 0) break;
                indgr[i] ++;
                dis[x][++ cnt[x]] = i;
            }
        }
        for(int i=1; i<=n; i++) {
            if(indgr[i] == 0) Q.push(i);
        }
        while (!Q.empty()) {
            x = Q.front();
            Q.pop();
            fin[x] += t[x];
            Ans = (Ans > fin[x]) ? Ans : fin[x];
            for(int i=1; i<=cnt[x]; i++) {
                indgr[dis[x][i]] -- ;
                fin[dis[x][i]] = (fin[dis[x][i]] > fin[x]) ? fin[dis[x][i]] : fin[x];
                if(indgr[dis[x][i]] == 0) {
                    Q.push(dis[x][i]);
                }
            }
        }
        printf("%d", Ans);
    }
  • 相关阅读:
    jmeter非GUI界面运行脚本
    jmeter函数助手
    jmeter远程压力测试
    linux无工具命令监控
    nmon定时任务
    nmon安装
    Charles抓包
    正交工具allpairs应用
    数据库常用架构和同步工作原理
    ARTS习惯(2)
  • 原文地址:https://www.cnblogs.com/bljfy/p/9463793.html
Copyright © 2011-2022 走看看