zoukankan      html  css  js  c++  java
  • 奖金(类拓扑排序)

    思路:将有要求的人入度增加,每次遍历所有点,将入度为0的点挑出来,记录在一个数组中,最后在删除其出度,每轮循环发工资钱数加1便可以保证总工资最少了。

    #include <cstdio>
    #include <iostream>
    using namespace std;
    int r[100000],c[100000][1000],sum=0,d[1000000];
    int main()
    {
        int n,m;
        //freopen("reward.in","r",stdin); 
        //freopen("reward.out","w",stdout);
    
    
        scanf("%d%d",&n,&m);
    
        for(int i=1;i<=m;i++)
         {
            int x,y;
    
            scanf("%d%d",&y,&x);
    
            c[x][++c[x][0]]=y;
    
            r[y]++;
         }
    
        int n1=n; 
        int q=100;
    
        while(n1>=1)
        {
         int cnt=0;
         int j; 
            for(j=1;j<=n;j++)
             if(r[j]==0)
              {
                cnt++;
                d[cnt]=j;
                n1--;
                sum+=q;
               r[j]=1e7;
              }
            if(cnt==0) {printf("Poor Xed");return 0;}
    
           for(int i=1;i<=cnt;i++)
            {
                int x=d[i];
                for(j=1;j<=c[x][0];j++)
                 r[c[x][j]]--;
            }
    
           q+=1;
        }
    
        printf("%d",sum);
    
        return 0;
    }
  • 相关阅读:
    头文件<stdarg.h>
    头文件<signal.h>
    头文件<setjmp.h>
    头文件<math.h>
    头文件<locale.h>
    头文件<limits.h>
    头文件<ctype.h>
    头文件<assert.h>
    PHP error_reporting
    八大排序算法
  • 原文地址:https://www.cnblogs.com/ht008/p/6819840.html
Copyright © 2011-2022 走看看