06-图7. How Long Does It Take (25)
来源:互联网 发布:行楷字帖 知乎 编辑:程序博客网 时间:2024/04/28 12:48
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
提交代码
————————————————
这个题目有几个坑,被我趟了。。。。
知识点如下。
1,对于图中有环的判定。主要用到的是队列,入度和出度的概念。在云课堂上的拓扑排序中有讲解。
2,对于终点会有多个的情况下,需要找到最大值。遍历所有的出度为0的点。
3,
代码如下
#include <iostream>#include <queue>using namespace std;/* run this program using the console pauser or add your own getch, system("pause") or input loop */#define MAX 110#define INF 10000#define max(a,b) (a)>(b)?(a):(b)int N=0,M=0;int cost[MAX][MAX];int Earlist[MAX],indegree[MAX],outdegree[MAX];void Creat(){cin>>N>>M;for(int i=0; i<N; i++){for(int j=0; j<N; j++){cost[i][j]=-1;}Earlist[i]=0;indegree[i]=0;outdegree[i]=0;}for(int i=0; i<M; i++){int v1,v2,c;cin>>v1>>v2>>c;cost[v1][v2]=c;//v1<v2!!outdegree[v1]++;indegree[v2]++;}}int Ear(){queue<int> q;int i=0,front=0;for(i=0; i<N; i++){if(indegree[i]==0){q.push(i);indegree[i]--;}}int cnt=0;while(!q.empty()){front=q.front();q.pop();cnt++;for(i=0; i<N; i++){if(cost[front][i] >=0){indegree[i]--;Earlist[i]=max(Earlist[i],Earlist[front]+cost[front][i]);}}for(i=0; i<N; i++){if(indegree[i] == 0){q.push(i);indegree[i]--;}}}if(cnt==N){return Earlist[front];}return -1;}int main(int argc, char** argv) {int res=0;Creat();if(Ear()==-1){cout<<"Impossible"<<endl;}else{for(int i=0; i<N; i++){if(outdegree[i] == 0){res=max(res,Earlist[i]);}}cout<<res<<endl;}return 0;}
- 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
- 计算中国农历(一)
- Linux rsync 同步实践
- nginx+tomcat7+redis集群配置
- python logging
- 欢迎使用CSDN-markdown编辑器
- 06-图7. How Long Does It Take (25)
- 在应用内展示App Store
- 计算中国农历(二)
- jdk:Arrays.asList&Collection.toArray
- 一个不错的js loading源码
- 什么是Java集合API?
- 文章标题
- ios 调用writeToFile将图片保存到本地一直失败的解决方案
- android app AlertDialog