PAT How Long Does It Take (25) (拓扑排序)
来源:互联网 发布:电脑管家mac版 编辑:程序博客网 时间:2024/05/01 02:17
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 (<=100), the number of activity check points (hence it is assumed that the check points are numbered from 0 to N-1), and M, the number of activities. Then M lines 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 120 1 60 2 40 3 51 4 12 4 13 5 25 4 04 6 94 7 75 7 46 8 27 8 4Sample Output 1:
18Sample Input 2:
4 50 1 10 2 22 1 31 3 43 2 5Sample Output 2:
Impossible
拓扑排序定义:
算法:
该题代码:
#include<bits/stdc++.h>using namespace std;const int maxn = 105;int n, m, k, head[maxn];struct node{int u, v, w, next;}edge[maxn];struct node2{int degree, early;}G[maxn];void addEdge(int u, int v, int w){edge[k].v = v;edge[k].w = w;edge[k].next = head[u];head[u] = k++;}void topSort(){queue<int> q;int count = 0;for(int i = 0; i < n; i++)if(G[i].degree == 0)q.push(i), count++;while(!q.empty()){int u = q.front(); q.pop();for(int t = head[u]; t != -1; t = edge[t].next){int to = edge[t].v;int curEar = G[u].early;int nextEar = G[to].early;int cost = edge[t].w;G[to].early = max(nextEar, curEar+cost);if(--G[to].degree == 0)q.push(to), count++;}}if(count != n) puts("Impossible");else{int ans = -1;for(int i = 0; i < n; i++)ans = max(ans, G[i].early);printf("%d\n", ans);}}int main(void){while(cin >> n >> m){memset(G, 0, sizeof(G));memset(head, -1, sizeof(head));k = 0;while(m--){int u, v, w;scanf("%d%d%d", &u, &v, &w);G[v].degree++;addEdge(u, v, w);}topSort();}return 0;}
- PAT How Long Does It Take (25) (拓扑排序)
- PAT 数据结构 06-图7. How Long Does It Take (25) 拓扑排序 最早开始时间
- PAT--How Long Does It Take (25)
- 08-图8 How Long Does It Take(25 point(s)) 拓扑排序
- 拓扑排序-图8 How Long Does It Take
- 关键路径算法(PAT How Long Does It Take (25))
- 06-4. How Long Does It Take (25)拓扑排序 求关键路径的最长的长度
- How Long Does It Take
- PAT(MOOC-数据结构) 06-4. How long does it take (25)
- 06-图7. How Long Does It Take (25)
- 06-图7. How Long Does It Take (25)
- 5-12 How Long Does It Take (25分)
- 08-图8 How Long Does It Take (25分)
- 08-图8 How Long Does It Take (25分)
- 5-12 How Long Does It Take (25分)
- 08-图8 How Long Does It Take (25分)
- 08-图8 How Long Does It Take (25分)
- 08-图8 How Long Does It Take(25 分)
- 158.Two Strings Are Anagrams-两个字符串是变位词(容易题)
- Appium 基础概念
- 新开始,java基础小结
- android多进程通信的几种方式一
- Appium - WebView测试(Android)
- PAT How Long Does It Take (25) (拓扑排序)
- 原串翻转
- 数据结构学习记录-1
- 全局变量赋值问题
- 链表反转C++
- 指针中星号的位置问题
- java的System.getProperty()方法详解
- 代理模式的扩展
- redis 在Java中使用