T1 工作依赖

  • 题目描述(Description

  2008年,奥运会将在中国举行。众所周知举办奥运会是一个庞大的工程,有许多准备工作要做,而这些工作也是要分先后、存在依赖关系的。比如我们说工作2依赖于工作1,意思是说在工作2开始做之前要必须结束工作1。我们假设,在一个时刻只有一个工作在进行,而且每样工作所依赖的其它工作不会超过10个。

  • 输入文件(job.in):

  第一行有两个整数N(0<=N<=10000)和M。所有工作从1到N编号。你需要计算第M个工作的最早结束时间。

接下来N行每行描述一个工作,第1行描述工作1,第二行描述工作2,……,以此类推。每行包含几个正整数,第i行的第1个整数是完成第i个工作需要的时间T(0<T<=100),第i行的其余数字是第i个工作所依赖的其它工作编号。我们保证不会出现循环依赖。

  • 输出文件(job.out):

  一个整数:工作M的最早结束时间。

  • 样例(Sample):

Sample Input Case 1:

2 2

3

2 1

Sample Output Case 1:

5

 

Sample Input Case 2:

3 3

3

2 1

4 1 2

Sample Output Case 2:

9

我的零分代码 (我不知道把零分代码贴上来干什么)

 1 /*
 2 id:gww
 3 language:
 4 啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊 
 5 */
 6 #include<bits/stdc++.h>
 7 using namespace std;
 8 const int N=10000+5;
 9 const int inf=0x3f3f3f3f;
10 int n,m,ti[N],dep[N][12],c[N],f[N][12];
11 bool vis[N][12];
12 int read()
13 {
14     int x=0,w=0;char ch=0;
15     while(!isdigit(ch)) {w|=ch=='-';ch=getchar();}
16     while(isdigit(ch)) x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
17     return w?-x:x;
18 }
19  
20 void dp(int u,int gs)
21 {
22     if(gs==c[u]) return;
23     for(int i=1;i<=c[u];i++)
24     {
25         int v=dep[u][i];
26         if(vis[u][i]==1) continue;
27         if(f[u][gs+1]>(f[u][gs]+ti[v]))
28         {
29             f[u][gs+1]=f[u][gs]+ti[v];
30             vis[u][i]=1;
31             dp(u,gs+1); 
32         }
33     }
34 }
35  
36 void clean()
37 {
38     memset(dep,0,sizeof(dep));
39     memset(c,0,sizeof(c));
40     memset(f,inf,sizeof(f));
41     memset(vis,0,sizeof(vis));
42 }
43  
44 int main()
45 {
46     n=read(),m=read();
47     clean();
48     char a[210];
49     for(int i=1;i<=n;i++)
50     {
51         memset(a,0,sizeof(a));
52         gets(a);
53         int la=strlen(a),cnt=0;
54         ti[i]=a[0]-'0';
55         for(int j=1;j<=la;j++)
56         if(a[j]>='0'&&a[j]<='9')
57         dep[i][++cnt]=a[j]-'0';
58     }
59     for(int i=1;i<=n;i++)     
60     if(dep[i][1]!=0)
61     for(int j=1;j<=10;j++)
62     if(dep[i][j]!=0)
63     c[i]++;
64     for(int i=1;i<=n;i++)//初始化 
65     f[i][0]=ti[i];
66     dp(m,0);
67     printf("%d",f[m][c[m]]);
68     return 0;
69 }
View Code

相关文章:

  • 2022-12-23
  • 2021-10-15
  • 2021-06-09
  • 2022-12-23
  • 2022-01-19
  • 2021-04-21
  • 2021-04-30
猜你喜欢
  • 2021-11-23
  • 2021-08-13
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-10-21
相关资源
相似解决方案