06-图7. How Long Does It Take (25)
来源:互联网 发布:a5域名交易 编辑:程序博客网 时间:2024/06/10 08:06
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 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
此题对拓扑排序改变一下即可,用类似 dijkstra的方法做
#include<cstdio>#include<iostream>#include<queue>#define INF -1//#define LOCALusing namespace std;int G[105][105];int ToplogicalSort(int N,int* Dist);void GetInDegree(int* InDegree,int N);int Max(int* Dist ,int N);int main(){#ifdef LOCAL freopen("data.in","r",stdin); freopen("data.out","w",stdout);#endif int N,M; cin >> N >> M; int i,j; for(i = 0;i<N;i++) for(j = 0;j<N;j++) G[i][j] = INF; int x,y,c; for(i = 0;i<M;i++){ cin >> x >> y >> c; G[x][y] = c; } int Dist[N]; int k = ToplogicalSort(N,Dist); if(!k) cout << "Impossible"; else cout << k; return 0;}int Max(int* Dist ,int N){ int max = -1; int i; for(i = 0;i<N;i++) if(Dist[i]>max) max = Dist[i]; return max;}int ToplogicalSort(int N,int* Dist){ queue<int>Q; int Counter = 0; int i,j; for(int i = 0;i<N;i++) Dist[i] = 0; int InDegree[N];// 取得入度 GetInDegree(InDegree,N); for(i = 0;i<N;i++) if(!InDegree[i]) Q.push(i); while(!Q.empty()){ j = Q.front(); Q.pop(); Counter++; for(i = 0;i<N;i++) if(G[j][i] > INF){ InDegree[i] -- ; Dist[i] = max(Dist[i],Dist[j] + G[j][i]);//类似dijkstra if(!InDegree[i]) Q.push(i); } } if(Counter != N) return 0; else return Max(Dist,N);}void GetInDegree(int* InDegree,int N){ int cnt = 0; int i,j; for(i = 0;i<N;i++,cnt = 0){ for(j = 0;j<N;j++){ if(G[j][i] > INF) cnt++; } InDegree[i] = cnt; }}
- 06-图7. How Long Does It Take (25)
- 06-图7. 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分)
- 08-图8 How Long Does It Take (25分)
- 08-图8 How Long Does It Take (25分)
- 08-图8 How Long Does It Take (25分)
- How Long Does It Take
- mooc -- 06-4 How Long Does It Take
- 5-12 How Long Does It Take (25分)
- PAT How Long Does It Take (25) (拓扑排序)
- 5-12 How Long Does It Take (25分)
- 08-图8 How Long Does It Take
- MOOC PTA 08-图8 How Long Does It Take
- 08-图8 How Long Does It Take
- 08-图8 How Long Does It Take
- 拓扑排序-图8 How Long Does It Take
- spring JPA使用
- JQuery操作动态操作Table
- android-async-http AsyncHttpClient介绍
- 用js实现 在当前页面打开新页面
- 大量盖楼回复的设计思路
- 06-图7. How Long Does It Take (25)
- window命令修改ip,dns,查看适配器名称
- 安卓有道词典开发实例
- Android系列---JSON数据解析
- [twig官方文档]为模版设计师而生的Twig(上)-Twig使用指南
- springMVC+Hibernate的配置
- Android高效显示图片详解(二)
- dubbo+zookeeper小例子
- LeetCode-Longest Palindromic Substring