08-图8 How Long Does It Take(25 point(s)) 拓扑排序
来源:互联网 发布:mac翻墙浏览器 编辑:程序博客网 时间:2024/05/22 06:16
08-图8 How Long Does It Take(25 point(s))
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 4
Sample Output 1:
18
Sample Input 2:
4 50 1 10 2 22 1 31 3 43 2 5
Sample Output 2:
Impossible
同时用邻接表和邻接矩阵存储,两个邻接表同时存储进来的和出去的,另外一个数组incnt实时记录每个节点的入度
#include<cstdio>#include<list>#include<vector>#include<algorithm>using namespace std;list<int>zeroin;vector<int>inn[100],outt[100];int n,m,mp[100][100],e[100],incnt[100];int main(){fill(e,e+100,-1);scanf("%d %d",&n,&m);int i,te,ts,tl;for(i=0;i<m;i++){scanf("%d %d %d",&ts,&te,&tl);mp[ts][te]=tl;inn[te].push_back(ts);outt[ts].push_back(te);incnt[te]++;}for(i=0;i<n;i++){if(inn[i].size()==0){zeroin.push_back(i);}}while(!zeroin.empty()){int now=zeroin.front();zeroin.pop_front();if(inn[now].size()==0){e[now]=0;}else{int maxt=-1;for(i=0;i<inn[now].size();i++){if(e[inn[now][i]]+mp[inn[now][i]][now]>maxt){maxt=e[inn[now][i]]+mp[inn[now][i]][now];}}e[now]=maxt;}for(i=0;i<outt[now].size();i++){incnt[outt[now][i]]--;if(incnt[outt[now][i]]==0){zeroin.push_back(outt[now][i]);}}}bool f=true;int maxt=-1;for(i=0;i<n;i++){if(e[i]==-1){f=false;break;}if(e[i]>maxt) maxt=e[i];}if(f){printf("%d",maxt);}else{printf("Impossible");}return 0;}
- 08-图8 How Long Does It Take(25 point(s)) 拓扑排序
- 拓扑排序-图8 How Long Does It Take
- PAT How Long Does It Take (25) (拓扑排序)
- PAT 数据结构 06-图7. 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分)
- 08-图8 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
- 08-图8 How Long Does It Take
- PTA—08-图8 How Long Does It Take (25分)
- MOOC浙大数据结构 — 08-图8 How Long Does It Take (25分)
- 08-图8 How Long Does It Take (25分)
- PAT--How Long Does It Take (25)
- listview更改选中时item背景色
- linux查看和修改PATH环境变量的方法
- Linux系统cp:omitting directory`XXX'问题解决
- mt2503将编号为50的频道添加为默认CB
- Linux中文件系统中的inode介绍
- 08-图8 How Long Does It Take(25 point(s)) 拓扑排序
- 左右经典布局
- phpstorm配置svn
- add 'tools:replace="android:value"' to <meta-data> element at AndroidManifest.xml:25:5-27:34 to over
- System.gc
- js:往tr里添加td也可以这么写
- 4.2创建与合并分支
- CC2640的Flash操作
- java日志文件log4j.properties配置详解