zoukankan      html  css  js  c++  java
  • HDU 2647 Reward

    Reward

    Time Limit: 1000ms
    Memory Limit: 32768KB
    This problem will be judged on HDU. Original ID: 2647
    64-bit integer IO format: %I64d      Java class name: Main
     
     

    Dandelion's uncle is a boss of a factory. As the spring festival is coming , he wants to distribute rewards to his workers. Now he has a trouble about how to distribute the rewards.
    The workers will compare their rewards ,and some one may have demands of the distributing of rewards ,just like a's reward should more than b's.Dandelion's unclue wants to fulfill all the demands, of course ,he wants to use the least money.Every work's reward will be at least 888 , because it's a lucky number.

     

    Input

    One line with two integers n and m ,stands for the number of works and the number of demands .(n<=10000,m<=20000)
    then m lines ,each line contains two integers a and b ,stands for a's reward should be more than b's.

     

    Output

    For every case ,print the least money dandelion 's uncle needs to distribute .If it's impossible to fulfill all the works' demands ,print -1.

     

    Sample Input

    2 1
    1 2
    2 2
    1 2
    2 1

    Sample Output

    1777
    -1

    Source

     
    解题:拓扑排序。
     
     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <cmath>
     5 #include <algorithm>
     6 #include <climits>
     7 #include <vector>
     8 #include <queue>
     9 #include <cstdlib>
    10 #include <string>
    11 #include <set>
    12 #include <stack>
    13 #define LL long long
    14 #define pii pair<int,int>
    15 #define INF 0x3f3f3f3f
    16 using namespace std;
    17 const int maxn = 10010;
    18 int n,m,in[maxn],money[maxn];
    19 vector<int>g[maxn];
    20 queue<int>q;
    21 int topSort() {
    22     int ans = 0;
    23     while(!q.empty()) q.pop();
    24     for(int i = 1; i <= n; i++) {
    25         if(!in[i]) {
    26             q.push(i);
    27             money[i] = 888;
    28         }
    29     }
    30     int sum = n;
    31     while(!q.empty()){
    32         sum--;
    33         int u = q.front();
    34         q.pop();
    35         for(int i = 0; i < g[u].size(); i++){
    36             if(--in[g[u][i]] == 0){
    37                 q.push(g[u][i]);
    38                 money[g[u][i]] = money[u]+1;
    39             }
    40         }
    41     }
    42     if(sum > 0) return -1;
    43     else{
    44         for(int i = 1; i <= n; i++)
    45             ans += money[i];
    46         return ans;
    47     }
    48 }
    49 int main() {
    50     int i,u,v;
    51     while(~scanf("%d %d",&n,&m)) {
    52         for(i = 1; i <= n; i++) {
    53             g[i].clear();
    54             in[i] = 0;
    55             money[i] = 0;
    56         }
    57         for(i = 0; i < m; i++) {
    58             scanf("%d %d",&v,&u);
    59             g[u].push_back(v);
    60             in[v]++;
    61         }
    62         printf("%d
    ",topSort());
    63     }
    64     return 0;
    65 }
    View Code
  • 相关阅读:
    Easy | LeetCode 154 | 剑指 Offer 11. 旋转数组的最小数字 | 二分法
    Easy | 剑指 Offer 17. 打印从1到最大的n位数 | 大数
    Easy | LeetCode 191 | 剑指 Offer 15. 二进制中1的个数 | 位运算
    Easy | 剑指 Offer 57
    Medium | LeetCode 15. 三数之和 | 双指针法
    jq load()方法实现html 模块化。
    vue 剪切图片上传头像,使用 cropperjs 实现
    vue 的nextTick的理解
    使用nodejs进行开发,concurrently模块,使我们同时执行多个命令。
    cookie生命周期expires 时间过期,但是cookie没有被浏览器清理的问题
  • 原文地址:https://www.cnblogs.com/crackpotisback/p/3945261.html
Copyright © 2011-2022 走看看