hdu 2467 拓扑排序之反向建图
来源:互联网 发布:淘宝宝贝详情模板尺寸 编辑:程序博客网 时间:2024/05/16 12:00
http://acm.hdu.edu.cn/showproblem.php?pid=2647
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
#include <string.h>#include <stdio.h>#include <iostream>using namespace std;struct note{ int to; int next;};note edge[20005];int head[20005],ip,iq;int indegree[20005],queue[20005],money[20005];void add(int u,int v){ edge[ip].to=v,edge[ip].next=head[u],head[u]=ip++;}int main(){ int m,n,a,b; while(cin >>n>>m) { memset(head,-1,sizeof(head)); ip=iq=0; memset(indegree,0,sizeof(indegree)); for(int i=0;i<=n;i++) money[i]=888; for(int i=0;i<m;i++) { cin>>a >>b; add(b,a); indegree[a]++; } for(int i=1;i<=n;i++) if(indegree[i]==0) queue[iq++]=i; for(int i=0;i<iq;i++) { for(int k=head[queue[i]];k!=-1;k=edge[k].next) { if(--indegree[edge[k].to]==0) { money[edge[k].to]=money[queue[i]]+1; queue[iq++]=edge[k].to; } } } int sum=0; if(iq ==n) { for(int i=1;i<=n;i++) { sum+=money[i]; } printf("%d\n",sum); } else printf("-1\n"); } return 0;}
0 0
- hdu 2467 拓扑排序之反向建图
- HDU 4857 逃生 【拓扑排序+反向建图+优先队列】
- HDU 4857 逃生 拓扑排序+反向建图
- HDU - 4857 逃生(反向建图 + 拓扑排序)
- HDU 4857 逃生 (拓扑排序+反向建图)
- HDU 4857(拓扑排序反向建边)
- hdu 3687 反向拓扑排序
- HDU 4857--逃生【拓扑排序 && 反向拓扑】
- poj 3687 拓扑排序 - 反向建图
- HDU2647(拓扑排序+反向建图)
- poj 3687 拓扑排序 反向建图
- poj3687反向建图+拓扑排序
- poj 3687 反向建图 拓扑排序
- poj3687 反向建图拓扑排序
- hdu4857 逃生【反向建图+拓扑排序】
- hdu 4857 逆向拓扑排序+反向输出
- hdu 4857 逃生【反向拓扑排序】
- 反向拓扑排序 HDU 4857 逃生
- 结构体名问题
- shell 递归函数---循环拷贝文件到指定目录
- Android用Application设置全局变量以及使用
- 黑马程序员—多线程
- 【C语言】07-基本语句和运算
- hdu 2467 拓扑排序之反向建图
- 编程中无穷大常量的设定技巧
- 棋牌游戏怎么运营才能赚钱
- 设计模式——单例模式(Singleton)
- tomcat部署方式
- 用NotificationCompat.Builder创建一个带进度的通知
- 在mac上配置cocos2d-x开发环境
- MongoDB---Capped Collection
- jzsdygfkljsdghos83tysiudfghkudfjhgkjdfgdfg