06-图7. How Long Does It Take (25)
2015-06-19 11:26
183 查看
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:
提交代码
————————————————
这个题目有几个坑,被我趟了。。。。
知识点如下。
1,对于图中有环的判定。主要用到的是队列,入度和出度的概念。在云课堂上的拓扑排序中有讲解。
2,对于终点会有多个的情况下,需要找到最大值。遍历所有的出度为0的点。
3,
代码如下
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
提交代码
————————————————
这个题目有几个坑,被我趟了。。。。
知识点如下。
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; }
相关文章推荐
- 计算中国农历(二)
- Objective-c中的相对路径和绝对路径
- 在应用内展示App Store
- 一步一步写算法(检查表)
- javascript返回顶部插件+源码
- 为你的 Hadoop 集群选择合适的硬件
- ios 从网络上获取图片并在UIImageView中显示
- 欢迎使用CSDN-markdown编辑器
- PHP自动生成表单代码分享
- nginx+tomcat7+redis集群配置
- hdu 1217 汇率 Floyd
- Java文件打包成exe,在未配置安装JDK和未配置的电脑上运行
- 计算中国农历(一)
- iOS图片拉伸技巧
- CMD & AMD 规范
- oracle在schema是什么意思?
- 2015年研三学习计划
- 在Mac电脑上为Dash制作docSet文档
- 到底是什么样?——不用争论。
- Andaroid L新特性