杭电-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.
 
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 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
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 宝宝拍不出来嗝怎么办 未满月宝宝溢奶怎么办 吃母乳老是吐奶怎么办 宝宝吃母乳吐奶怎么办 新生儿三天没大便了怎么办 奶水多宝宝呛奶怎么办 婴儿的含乳姿势不正确怎么办 一个月竖着抱了怎么办 乳头被婴儿吸痛怎么办 婴儿从鼻孔吐奶怎么办 宝宝习惯含着乳头睡觉怎么办? 宝宝习惯奶瓶不吃乳头怎么办 婴儿从鼻子吐奶怎么办 宝宝从鼻孔出奶怎么办 一个月婴儿溢奶怎么办 刚出生婴儿溢奶怎么办 宝宝含不住乳晕怎么办 宝宝含不了乳晕怎么办 宝宝溢奶一直哭怎么办 宝宝倒奶很多次怎么办 宝宝吃了润肤乳怎么办 奶瓶很难吸出奶怎么办 2个月宝宝奶睡怎么办 孕四个月轻度缺碘怎么办 宝宝吃了奶粉呕吐怎么办 宝宝吃奶只含乳头怎么办 母乳流的太快怎么办 两个月小孩乳头混淆了怎么办 喂奶期间乳房有肿块怎么办 宝宝只吃乳头不吃奶嘴怎么办 宝宝只吃一个乳头怎么办 宝宝只吃乳头不吃奶瓶怎么办 给泰迪奶狗喂奶呛到了怎么办 奶壶喂奶呛到了怎么办 宝宝喝奶瓶老是呛到怎么办 两个月宝宝睡偏头了怎么办 婴儿吐奶豆花状怎么办 吃母乳乳头破了怎么办 顺产后仰卧睡了怎么办 宝宝含着母乳睡怎么办 刚出生的孩子不吃母乳怎么办