1 条题解

  • 0
    @ 2017-11-03 18:39:54

    标程,我知道标程很丑但是我不想改

    #include<iostream>
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<math.h>
    #include<algorithm>
    #include<queue>
    using namespace std;
    int n,m,a[100010],b[100010],c[100010],x[100010],f[100010];
    priority_queue<int> p;//个人极其讨厌队列叫p不叫q。
    int main()
    {
        int i,j,k;
        scanf("%d%d",&n,&m);
        for(i=1;i<=m;i++)//链式前向星
          {
           scanf("%d%d",&j,&k);
           b[i]=k;
           c[i]=a[j];
           a[j]=i;
           x[k]++;//x数组储存入度
          }
        for(i=1;i<=n;i++)
          if(!x[i])
            p.push(n-i);//-i就可以了标程就是要加个n
        for(i=1;i<=n;i++)
          {
           if(p.empty())
             break;
           f[i]=n-p.top();
           p.pop();
           for(j=a[f[i]];j>0;j=c[j])
             if(!--x[b[j]])
               p.push(n-b[j]);
          }
        if(i<=n)
          {
           printf("-1\n");
           return 0;
          }
        for(i=1;i<=n;i++)
          printf("%d ",f[i]);
        printf("\n");
        return 0;
    }
    
  • 1

信息

难度
6
分类
(无)
标签
(无)
递交数
32
已通过
9
通过率
28%
上传者