• 1352:【例413】奖金


    【题目描述】

    由于无敌的凡凡在2005年世界英俊帅气男总决选中胜出,Yali Company总经理Mr.Z心情好,决定给每位员工发奖金。公司决定以每个人本年在公司的贡献为标准来计算他们得到奖金的多少。

    于是Mr.Z下令召开mm方会谈。每位参加会谈的代表提出了自己的意见:“我认为员工a的奖金应该比b高!”Mr.Z决定要找出一种奖金方案,满足各位代表的意见,且同时使得总奖金数最少。每位员工奖金最少为100100元。

    【输入】

    第一行两个整数nn,mm,表示员工总数和代表数;

    以下mm行,每行2个整数aa,bb,表示某个代表认为第a号员工奖金应该比第b号员工高。

    【输出】

    若无法找到合理方案,则输出“Poor Xed”;否则输出一个数表示最少总奖金。

    【输入样例】

    2 1
    1 2

    【输出样例】

    201

    【提示】

    【数据规模】

    80%的数据满足:n1000n≤1000,m2000m≤2000;

    100%的数据满足:n10000n≤10000,m20000m≤20000。

    #include <bits/stdc++.h>
    using namespace std;
    
    void show(vector<vector<int>> &a)
    {
        for (int i = 1; i < a.size(); i++) {
            cout << i << ": ";
            for (int j = 0; j < a[i].size(); j++) {
                cout << a[i][j] << " ";
            }
            cout << endl;
        }
    }
    
    void show(vector<int> &a)
    {
        for (int i = 1; i < a.size(); i++) {
            cout << a[i] << " ";
        }
        cout << endl;
    }
    
    int topo(vector<vector<int>> &a)
    {
        int ans = 0; // 奖金
        int cnt = 0; // 员工数量
        int factor = 100; // 最少奖金
        vector<bool> visited(a.size());
        while (cnt < a.size() - 1) {
            vector<int> inDeg(a.size()); // 入度
            for (int i = 1; i < a.size(); i++) {
                if (visited[i]) {
                    continue;
                }
                for (int j = 0; j < a[i].size(); j++) {
                    inDeg[a[i][j]] += 1;
                }
            }
            // show(inDeg);
            bool found = false;
            for (int i = 1; i < inDeg.size(); i++) {
                if (visited[i]) {
                    continue;
                }
                if (inDeg[i] == 0) {
                    visited[i] = true;
                    ans += factor;
                    cnt += 1;
                    found = true;
                }
            }
            if (!found) {
                return -1;
            }
            factor += 1;
        }
        return ans;
    }
    
    int main()
    {
        // freopen("in.txt", "r", stdin);
        int n, m; // 顶点数n,边数m
        scanf("%d%d", &n, &m);
        vector<vector<int>> a(n + 1); // 邻接表
        for (int i = 1; i <= m; i++) {
            int x, y; // x比y奖金多
            scanf("%d%d", &x, &y);
            a[y].push_back(x); // y比x少
        }
        // show(a);
        int ans = topo(a);
        if (ans < 0) {
            printf("Poor Xed\n");
        } else {
            printf("%d\n", ans);
        }
        return 0;
    }
    

      

  • 相关阅读:
    sharepoint获取通用路径
    Sharepoint 在网站中创建用户组并添加权限
    ERP失败案例启示录:人是最关键的
    人生主要过渡期
    Windows Server 2012虚拟化性能及十大重要功能
    抢先看:iPhone5整机完整亮相
    未来五年10大关键IT趋势
    [转]完善的资产管理:实现以可靠性为中心的维护管理
    如何摆脱ERP困局
    项目经理的“七宗罪”
  • 原文地址:https://www.cnblogs.com/gaojs/p/15584365.html
Copyright © 2020-2023  润新知