关键子工程
来源:互联网 发布:mac ftp下载工具 编辑:程序博客网 时间:2024/05/16 04:13
问题描述 Description
在大型工程的施工前,我们把整个工程划分为若干个子工程,并把这些子工程编号为
(
(
(
(
例如,有五个子工程的工程规划表:
其中,表格中第
间为
又例如,有五个子工程的工程规划表:
上述的子工程划分不合理,因为无法安排子工程
输入描述 Input Description
第
第
第
输出描述 Output Description
如子工程划分不合理,则输出
如子工程划分合理,则用两行输出:第
小到大顺序输出所有关键子工程的编号。
输入样例 Sample Input
5
5 4 12 7 2
0 0 0 0
0 0 0 0
0 0 0 0
1 1 0 0
1 1 1 1
输出样例 Sample Output
14
1 3 4 5
分析 I Think
对于整个工程,可以看作一个有向图,如果能进行拓扑排序,那么他就有解。如果一个点的最迟发生时间等于它的最早发生时间,那么他就是一个关键子工程,注意可能有多个点出度为
代码 Code
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;int last[201];int early[201];int du[201][2];int order[201];int a[201][201];int time[201];int stack[201],top=-1;int n;bool tp_sort();int main(){ scanf("%d",&n); for(int i=1;i<=n;++i) scanf("%d",&time[i]); for(int i=1;i<=n;++i){ for(int j=1;j<i;++j){ scanf("%d",&a[i][j]); if(a[i][j]){ ++du[i][0]; ++du[j][1]; } } for(int j=i+1;j<=n;++j){ scanf("%d",&a[i][j]); if(a[i][j]){ ++du[i][0]; ++du[j][1]; } } } if(!tp_sort()){ puts("-1"); return 0; } for(int i=1;i<=n;++i) for(int j=1;j<=n;++j) if(a[j][order[i]]) early[j] = max(early[j],early[order[i]]+time[order[i]]); int maxn = -1; memset(last,0x7f,sizeof last); for(int i=1;i<=n;++i) if(!du[i][1]) maxn = max(maxn,early[i]+time[i]); for(int i=1;i<=n;++i) if(!du[i][1]) last[i] = maxn-time[i]; for(int i=n;i>=1;--i) for(int j=1;j<=n;++j) if(a[order[i]][j]) last[j] = min(last[j],last[order[i]]-time[j]); printf("%d\n",maxn); for(int i=1;i<=n;++i) if(last[i] == early[i]) printf("%d ",i); return 0;}bool tp_sort(){ top = -1; for(int i=1;i<=n;++i) if(!du[i][0]) stack[++top] = order[++order[0]] = i; while(top != -1){ int now = stack[top--]; for(int i=1;i<=n;++i){ if(a[i][now]){ --du[i][0]; if(!du[i][0]) stack[++top] = order[++order[0]] = i; } } } return order[0] == n;}
- 关键子工程
- 关键子工程
- 关键子工程
- 关键子工程
- 关键子工程解题报告
- [题解]关键子工程 拓扑排序+DP
- [题解] 关键子工程(DP+拓扑)
- 【动态规划】【记忆化搜索】关键子工程
- 一、 关键子工程(project.c/cpp/pas) 拓扑排序+aov
- 关键子static
- Var关键子
- Java static关键子
- using关键子的作用
- 主工程添加子工程
- QT工程创建子工程
- [QT创建子工程]
- 质量工程的一些关键活动
- 14. 计算工程完成的关键路径
- IOS 图片下载存缓存沙盒
- Spring AOP 实现原理
- 相遇
- Android内容提供者(二)创建自己的Provider
- C# time.ToString("yyyyMMddHH") "yyyyMMdd"TO--DateTime
- 关键子工程
- 如何在NSLog中输出结构体
- 批处理 cd /d %~dp0
- android --APK下载、安装、启动
- 支付宝集成获取私钥与公钥【原创】
- 【Linux笔记】Linux目录结构
- SpringMVC+Hibernate将连接oracle的数据库换成MySQL,报错如何解决
- JAVA QUEUE 队列 使用
- firstChild.nodeValue 和 lastChild.nodeValue