• 任务安排


    问题 C: 任务安排

    时间限制: 1 Sec  内存限制: 128 MB
    提交: 91  解决: 5
    [状态] [命题人:gyx]
    题目描述
    作为规划局长的你成功确定了城市C的改造方案,方案共有n个子任务,由于要保证城市的正常运转,所以任务之间无法相互独立进行,某些任务需要在另一些任务完成之后才能进行。
    输入
    输入第一行包含两个整数n和m,分别表示任务的个数和任务之间具有的依赖关系数量。
    以下m行每行包含两个整数i和j,表示任务i完成之后任务j才能开始。
    输出
    输出一行,包含n个用空格隔开的数字,表示可以完成所有任务的方案顺序,如果有多种方案,按照下列策略输出:
    完成前置方案后,优先完成后续方案;
    有多个方案可选时,优先完成序号较小的方案。 
    如果没有可行方案,输出-1。 
    样例输入
    5 4
    1 2
    2 3
    1 3
    1 5
    样例输出
    1 2 3 4 5
    提示
    【数据范围】
    对于100%的数据,1<=n<=1000。
     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 int a[1005][1005],n,m,ans[1005],s,b[1005],t[1005];
     4 int main()
     5 {
     6     scanf("%d%d",&n,&m);
     7     for(int i=1;i<=m;i++)
     8     {
     9         int x,y;
    10         scanf("%d%d",&x,&y);
    11         a[y][++b[y]]=x;
    12         t[y]=1;
    13     }
    14     for(int i=1;i<=n;i++)
    15     {
    16         if(t[i]==0)
    17         {
    18             ans[++s]=i;
    19             t[i]=-1;
    20             for(int j=1;j<=n;j++) 
    21             {
    22                 if(t[j]!=0&&t[j]!=-1)
    23                 {
    24                     for(int k=1;k<=b[j];k++)
    25                     {
    26                         if(a[j][k]==i) 
    27                         {
    28                             a[j][k]=0;
    29                             bool f=false;
    30                             for(int lhy=1;lhy<=b[j];lhy++)
    31                             {
    32                                 if(a[j][lhy]!=0) 
    33                                 {
    34                                     f=true;
    35                                     break;
    36                                 }
    37                             }
    38                             if(f==false) t[j]=0;
    39                         }
    40                     }
    41                 }
    42                  
    43             }
    44             i=0;
    45         }
    46     }
    47     if(s!=n) printf("-1");
    48     else
    49     {
    50         for(int i=1;i<n;i++) printf("%d ",ans[i]);
    51         printf("%d",ans[n]);
    52     }
    53     return 0;
    54 }
    55 /*
    56 5 5
    57 1 2 
    58 2 3
    59 3 4
    60 5 4
    61 1 5
    62 */
    View Code
  • 相关阅读:
    test14
    test13
    test12
    test11
    Xcode常用快捷键
    OC弱语法
    对象的结构体属性的成员修改
    IOS 获取手机各种信息
    IOS app启动过程
    iOS退出键盘的两种方式
  • 原文地址:https://www.cnblogs.com/jiuduSHENBENG/p/10583801.html
Copyright © 2020-2023  润新知