• 7-12 How Long Does It Take (25分) 最短工期


    Given the relations of all the activities of a project, you are supposed to find the earliest completion time of the project.

    Input Specification:

    Each input file contains one test case. Each case starts with a line containing two positive integers N (≤), the number of activity check points (hence it is assumed that the check points are numbered from 0 to N1), and M, the number of activities. Then Mlines follow, each gives the description of an activity. For the i-th activity, three non-negative numbers are given: S[i]E[i], and L[i], where S[i] is the index of the starting check point, E[i] of the ending check point, and L[i] the lasting time of the activity. The numbers in a line are separated by a space.

    Output Specification:

    For each test case, if the scheduling is possible, print in a line its earliest completion time; or simply output "Impossible".

    Sample Input 1:

    9 12
    0 1 6
    0 2 4
    0 3 5
    1 4 1
    2 4 1
    3 5 2
    5 4 0
    4 6 9
    4 7 7
    5 7 4
    6 8 2
    7 8 4
    
     

    Sample Output 1:

    18
    
     

    Sample Input 2:

    4 5
    0 1 1
    0 2 2
    2 1 3
    1 3 4
    3 2 5
    
     

    Sample Output 2:

    Impossible

    应该是关键路径的问题,用拓扑排序来解决。
    代码:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    int n,m,ans;
    int mp[100][100];
    int l[100],q[100],t[100];
    int main() {
        int a,b,c,head = 0,tail = 0;
        scanf("%d%d",&n,&m);
        memset(mp,-1,sizeof(mp));
        for(int i = 0;i < m;i ++) {
            scanf("%d%d%d",&a,&b,&c);
            mp[a][b] = c;
            l[b] ++;
        }
        for(int i = 0;i < n;i ++) {
            if(!l[i]) {
                q[tail ++] = i;
            }
        }
        while(head < tail) {
            int temp = q[head ++];
            if(t[temp] > ans) ans = t[temp];
            for(int i = 0;i < n;i ++) {
                if(mp[temp][i] != -1) {
                    l[i] --;
                    if(!l[i]) q[tail ++] = i;
                    if(t[i] < t[temp] + mp[temp][i]) {
                        t[i] = t[temp] + mp[temp][i];
                    }
                }
            }
        }
        if(tail < n) printf("Impossible");
        else printf("%d",ans);
    }
  • 相关阅读:
    用XPath定位Web页面元素时,如何快速验证XPath语句是否正确?
    遇到Web页面禁用鼠标右键操作时,该如何解禁?
    Python之win32模块
    Python之smtplib模块
    Python之telnetlib模块
    使用HttpRunner3+Allure+Jenkins实现Web接口自动化测试
    Python实现Thrift Server
    Python之requests模块-hook
    php新手常用的函数(随时更新)
    手机测试pc端网页
  • 原文地址:https://www.cnblogs.com/8023spz/p/12264617.html
Copyright © 2020-2023  润新知