• 拓扑排序——奖金


    奖金
    【问题描述】
      由于无敌的凡凡在2005年世界英俊帅气男总决选中胜出,Yali Company总经理Mr.Z心情好,决定给每位员工发奖金。公司决定以每个人本年在公司的贡献为标准来计算他们得到奖金的多少。于是Mr.Z下令召开m方会谈。每位参加会谈的代表提出了自己的意见:“我认为员工a的奖金应该比b高!”Mr.Z决定要找出一种奖金方案,满足各位代表的意见,且同时使得总奖金数最少。每位员工奖金最少为100元。
    【输入格式】
      第一行两个整数n,m,表示员工总数和代表数;以下m行,每行2个整数a,b,表示某个代表认为第a号员工奖金应该比第b号员工高。
    【输出格式】
      若无法找到合理方案,则输出“Poor Xed”;否则输出一个数表示最少总奖金。
    【输入样例】
      2 1
      1 2
    【输出样例】
      201
     1 #include<iostream>
     2 #include<cstdio>
     3 using namespace std;
     4 
     5 const int maxn=9999;
     6 int n,m,u,v,money;
     7 int a[maxn][maxn],du[maxn];
     8 int zh[maxn];
     9 
    10 bool topsort()
    11 {
    12     int tot=0,k=0,hh;
    13     while(tot<n)
    14     {
    15         hh=0;
    16         for(int i=1;i<=n;i++)
    17         {
    18             if(!du[i])
    19             {
    20                 du[i]=0x7fffffff;
    21                 tot++;
    22                 hh++;
    23                 zh[hh]=i;
    24                 money+=100;
    25             }
    26         }
    27             money+=k*hh;
    28             k++;
    29             if(hh==0) return 0;
    30             for(int i=1;i<=hh;i++)
    31               for(int j=1;j<=a[zh[i]][0];j++)
    32                 du[a[zh[i]][j]]--; 
    33     }
    34     return 1;
    35 }
    36 
    37 int main()
    38 {
    39     cin>>n>>m;
    40     for(int i=1;i<=m;i++){
    41         cin>>u>>v;
    42         a[v][0]++;
    43         a[v][a[v][0]]=u;
    44         du[u]++;
    45     }
    46     if(topsort()) cout<<money<<endl;
    47     else cout<<"Poor Xed"<<endl;
    48     return 0;
    49 }
     
  • 相关阅读:
    js代码编写规范
    mysql数据库的水平拆分与垂直拆分
    git使用WebHook实现自动构建
    解决php
    laravel为模型中所有查询统一添加WHERE条件
    centos7+ 安装 php7.2
    nginx配置https
    git常用命令
    php如何应对秒杀抢购高并发思路
    nginx配置优化+负载均衡+动静分离详解
  • 原文地址:https://www.cnblogs.com/wsdestdq/p/6710381.html
Copyright © 2020-2023  润新知