【杭电oj2647】Reward
来源:互联网 发布:杭州java平均薪资 编辑:程序博客网 时间:2024/06/04 19:53
Reward
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 7528 Accepted Submission(s): 2377
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.
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.
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 11 22 21 22 1
Sample Output
1777-1
Author
dandelion
Source
曾是惊鸿照影来
Recommend
yifenfei | We have carefully selected several similar problems for you: 3342 1811 2680 2112 2094
数据太大用邻接表+队列,每一层薪水加一块钱(这老板真抠),上一层加一即可。
#include<stdio.h> #include<string.h> #include<queue> #include<algorithm> using namespace std; struct zz { int to; int next; }p[20200]; int in[10100]; int head[10100]; int num[10100]; void topo(int n) { queue<int>q; int i,j,k; int ans=0; int sum=0; for(i=1;i<=n;i++) { if(in[i]==0) q.push(i); } while(!q.empty()) { k=q.front(); q.pop(); ans++; for(j=head[k];j!=-1;j=p[j].next) { in[p[j].to]--; if(in[p[j].to]==0) { q.push(p[j].to); num[p[j].to]=num[k]+1; //重点看懂这一步 } } } for(i=1;i<=n;i++) sum+=num[i]; if(ans<n) printf("-1\n"); else printf("%d\n",sum); } int main(){ int n,m,i,j,a,b; while(scanf("%d%d",&n,&m)!=EOF) { memset(in,0,sizeof(in)); memset(head,-1,sizeof(head)); for(i=1;i<=n;i++) num[i]=888; for(i=0;i<m;i++) { scanf("%d%d",&a,&b); p[i].to=a; p[i].next=head[b]; head[b]=i; in[a]++; } topo(n); } return 0; }
0 0
- 【杭电oj2647】Reward
- 杭电2647 Reward
- 【杭电2647】Reward
- 【杭电】[2647]Reward
- 杭电2647Reward
- 杭电2647 Reward(拓扑排序)
- 杭电-2641 Reward(拓扑排序)
- Reward HDU杭电2647【反向拓扑+队列】
- 杭电acm 3613Best Reward(字符串)
- 【杭电oj】2647 - Reward(拓扑排序)(含测试数据)
- Reward
- Reward
- Reward
- Reward
- Reward
- reward
- Reward
- 拓扑&&reward
- 很久前Oracle的一些笔记_7-8
- 年终奖(动态规划)---- 京东2016研发工程师编程题
- 用非递归方式实现二叉树先序便利
- 五大常用算法之一:分治算法(转)
- At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger fo
- 【杭电oj2647】Reward
- Leetcode之路 258. Add Digits
- SiteMesh
- eclipse下maven项目开发编译
- 向量vector理解
- HDU 1686 Oulipo
- 五大常用算法之三:贪心算法(转)
- Android:极光推送集成注意要点——解决:Get sdk version fail![获取sdk版本失败!]解决方案
- [编程题]由异或门引出的几道数组的算法题