杭电-2641 Reward(拓扑排序)
来源:互联网 发布:杭州java平均薪资 编辑:程序博客网 时间:2024/05/17 01:27
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 2094 1142
#include<cstdio> #include<cstring> #include<queue> using namespace std; int n,indegree[10010]; int head[20010],num[10010]; struct node { int to,next; }map[20010]; void tuopu() { int i,top,k=0,sum=0; queue<int>q; for(i=1;i<=n;++i) { if(indegree[i]==0) q.push(i); } while(!q.empty()) { top=q.front(); q.pop(); k++;//用k标记是否满足所有人需求,即不出现环 for(i=head[top];i!=-1;i=map[i].next) { indegree[map[i].to]--; if(indegree[map[i].to]==0) { q.push(map[i].to); num[map[i].to]=num[top]+1; //将下一层节点含有的值加一 } } } for(i=1;i<=n;++i) sum+=num[i]; if(k==n)//k等于n,则有向图中无环 printf("%d\n",sum); else printf("-1\n"); } int main() { int m,i,a,b; while(scanf("%d%d",&n,&m)!=EOF) { memset(indegree,0,sizeof(indegree)); 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);//反向存表 map[i].to=a; map[i].next=head[b]; head[b]=i; indegree[a]++; } tuopu(); } return 0; }
0 0
- 杭电-2641 Reward(拓扑排序)
- 杭电2647 Reward(拓扑排序)
- Reward(拓扑排序)
- 【杭电oj】2647 - Reward(拓扑排序)(含测试数据)
- hdu Reward(拓扑排序)
- hdu2647 Reward(拓扑排序)
- HDU2647-Reward(拓扑排序)
- hdu2647 Reward (拓扑排序)
- HDU2547 Reward(拓扑排序)
- HDU2647:Reward(拓扑排序)
- HDU2647---Reward(拓扑排序(启发性))
- HDU 2647 Reward(拓扑排序)
- hdu 2647 Reward (拓扑排序)
- HDOJ 2647 Reward(分层拓扑排序)
- hdu 2647 Reward ( 拓扑排序 )
- HDU 2647 - Reward(拓扑排序)
- hdu 2647 Reward (拓扑排序)
- HDU 2647Reward(拓扑排序)
- 分享几个Linux下的码流分析工具
- HDU 4493--水题+控制精度
- 8.5信息学夏令营练习(状压dp)
- android studio 两次按钮,不同效果
- TreeMap源码解析 给jdk写注释系列之jdk1.6容器(7)
- 杭电-2641 Reward(拓扑排序)
- Android 基于google Zxing实现二维码、条形码扫描,仿微信二维码扫描效果
- CSS—组合选择器
- HDU 1711 Number Sequence
- 如果获得页面跳转的最终URL
- 很久前Oracle的一些笔记_7-8
- 年终奖(动态规划)---- 京东2016研发工程师编程题
- 用非递归方式实现二叉树先序便利
- 五大常用算法之一:分治算法(转)