PAT How Long Does It Take (25) (拓扑排序)
2016-09-07 22:57
375 查看
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:
Sample Output 1:
Sample Input 2:
Sample Output 2:
Impossible
拓扑排序定义:
算法:
该题代码:
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 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<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 数据结构 06-图7. How Long Does It Take (25) 拓扑排序 最早开始时间
- 关键路径算法(PAT How Long Does It Take (25))
- PAT--How Long Does It Take (25)
- PAT(MOOC-数据结构) 06-4. How long does it take (25)
- 06-4. How Long Does It Take (25)拓扑排序 求关键路径的最长的长度
- 08-图8 How Long Does It Take(25 point(s)) 拓扑排序
- 08-图8 How Long Does It Take(25 分)
- 06-图7. How Long Does It Take (25)
- 拓扑排序-图8 How Long Does It Take
- 06-图7. How Long Does It Take (25)
- 06-图7. How Long Does It Take (25)
- 7-11 How Long Does It Take(25 分)(toposort)
- PAT甲题题解-1043. Is It a Binary Search Tree (25)-二叉搜索树
- PAT甲级1043. Is It a Binary Search Tree (25)
- 08-图8 How Long Does It Take
- PAT Advanced Level 1043. Is It a Binary Search Tree (25)(Java and C++)
- PAT 1043. Is It a Binary Search Tree (25)(判断是否是搜索树并构建和后序输出)(待修改)
- 【PAT】1043. Is It a Binary Search Tree (25)
- PAT 甲级 1043. Is It a Binary Search Tree (25)
- 中国大学MOOC-数据结构基础习题集、06-4、How Long Does It Take