Reward

          Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
                Total Submission(s): 9800    Accepted Submission(s): 3131

Problem Description
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
Author
dandelion
Source
曾是惊鸿照影来
题目重现:

问题描述
蒲公英的叔叔是工厂的老板。 随着春节来临,他想向他的工人分发奖励。 现在他有分享奖励的麻烦。
工作人员会比较他们的回报,有的可能会有分配奖励的要求,就像一个奖励应该超过b's.蒲公英的无礼想要完成所有的要求,当然,他想使用最少的钱。每个工作 奖励至少是888,因为这是一个幸运数字。

思路:
拓扑排序,求出每一层上的节点,对于每一层比上一层的钱数多一,至于无法确定的情况即是出现环的情况、、直接输出-1。
怎样判断是哪一层?!我们进行删边的时候当前节点的入读为0,被删掉后的入度为零的节点一定比当前节点的层数多1.我们用这一层关系来判断、也就是这样ceng[edge[i].to]=ceng[x]+1、、、
代码:
#include<queue>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define N  20100
#define money 888
using namespace std;
queue<int>q;
long long anss;
int n,m,x,y,s,in[N],tot,sum,head[N],ans[N];
int read()
{int x=0,f=1; char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1; ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-'0'; ch=getchar();}return x*f;
}
struct Edge
{int from,to,next;
}edge[N];
int add(int x,int y)
{tot++;edge[tot].to=y;edge[tot].next=head[x];head[x]=tot;
}
void begin()
{s=0,sum=0,tot=0;anss=0;memset(in,0,sizeof(in));memset(ans,0,sizeof(ans));memset(head,0,sizeof(head));memset(edge,0,sizeof(edge));
}
int main()
{while(scanf("%d%d",&n,&m)!=EOF){begin();for(int i=1;i<=m;i++){x=read(),y=read();add(y,x),in[x]++;}for(int i=1;i<=n;i++)if(in[i]==0) q.push(i),ans[i]=0;while(!q.empty()){x=q.front(),q.pop(),sum++;for(int i=head[x];i;i=edge[i].next){int t=edge[i].to;in[t]--;if(in[t]==0) q.push(t),ans[t]=ans[x]+1;}}if(sum!=n) printf("-1\n");else {for(int i=1;i<=n;i++)anss+=money+ans[i];printf("%lld\n",anss);}       }return  0;
}

转载于:https://www.cnblogs.com/z360/p/7420457.html

HDU——2647 Reward相关推荐

  1. HDU 2647 Reward (拓扑排序)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2647 题意是给你n点m条有向边,叶子点(出度为0)上的值为888,父亲点为888+1,依次计算... ...

  2. HDU 2647 Reward 拓扑排序

    http://acm.hdu.edu.cn/showproblem.php?pid=2647 题意: 输入N和M代表N个人和M组数据,M组数据中的A和B代表A的工资要比B的工资高,底薪是(888元), ...

  3. Hdu - 2647 - Reward

    上题目 Reward Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  4. HDU 2647 拓扑排序

    题意:每个人的工资至少888,然后有m个条件,前者比后者要多.求最少工资. 分析: 最开始的开邻接矩阵的肯定超时,如果dfs,会出现由于刚开始不是从入度为0的点出发,后期修改不了.比较麻烦. 正确方式 ...

  5. 图论复习(各类习题)

    可以结合这篇博客进行复习:http://www.cnblogs.com/z360/p/7363034.html 一.强连通分量.缩点 习题: 洛谷--P2746 [USACO5.3]校园网Networ ...

  6. ACM 图论入门题(附代码解释)

    目录 HDU 1869 六度分离 HDU 1874 畅通工程续 (最短路) HDU 3339 In Action (最短路+01背包) HDU 1162 Eddy's picture(prime算法) ...

  7. 【转载】图论 500题——主要为hdu/poj/zoj

    转自--http://blog.csdn.net/qwe20060514/article/details/8112550 =============================以下是最小生成树+并 ...

  8. 【HDOJ图论题集】【转】

    1 =============================以下是最小生成树+并查集====================================== 2 [HDU] 3 1213 How ...

  9. 一系列图论问题[转]

    =============================以下是最小生成树+并查集====================================== [HDU] 1213 How Many ...

  10. 2019 HZNU Winter Training Day 14 Comprehensive Training

    A - Choosing Capital for Treeland CodeForces - 219D 题意:有一颗单向边的树,要选取一个结点作为首都.要求是这个结点到其它结点,总共需要翻转的路径数量 ...

最新文章

  1. jforum中对各种servlet对象都进行了封装
  2. fMRI在认知心理学上的研究
  3. 协方差公式性质证明过程_论文推荐 | 刘志平:等价条件平差模型的方差-协方差分量最小二乘估计方法...
  4. 前端学习(2096):作业得回顾和完成
  5. 【论文解读】IJCAI2019: 面向中文NER 基于lexicon rethinking的CNN模型
  6. HihoCoder-1523(思维)
  7. 巧妙突破大容量邮箱附件大小限制
  8. 小甲鱼Python课后习题028
  9. html翻译插件,翻译插件:ImTranslator
  10. 谈谈创业这点事(4)
  11. Android 补间动画之平移动画TranslateAnimation
  12. GPU共享内存:pycuda使用教程
  13. Java实现 蓝桥杯VIP 算法提高 盾神与砝码称重
  14. MMDetection框架入门教程(完全版)
  15. 访客模式 无痕模式 区别_模式:访客模式
  16. linux密码配置文件详解,用户配置文件与密码配置文件
  17. 企业WAP建站的10个理由
  18. 关于options请求的一点理解
  19. 高并发秒杀系统方案的优化
  20. java字符转成ncr_NCR字符编码(形如xx)转换为汉字 in JAVA

热门文章

  1. 基于python-实现仿天眼查-企查查-完整源码
  2. 中国矿业大学计算机学院推免,j机电学院2008届毕业生推免工作顺利完成
  3. 怎么对文件夹名称进行编号排序
  4. stony大学计算机科学找工作,美国STEM专业毕业生薪资最高的院校有哪些?
  5. 阿里巴巴 29 个屌炸天的开源项目
  6. 吉林大学操作系统上机(实验二:处理机调度——实时调度算法EDF和RMS)
  7. 福建将全面实现各市县政府机关软件正版化
  8. 阿尔卡特交换机配置_ALCATEL-交换机配置手册(中文).doc
  9. IOS开发学习基于swift语言
  10. 【机械制造基础部分(京玉海第二版)部分思考题】