zoukankan      html  css  js  c++  java
  • 4040 EZ系列之奖金

    4040 EZ系列之奖金

     

    时间限制: 1 s
    空间限制: 64000 KB
    题目等级 : 钻石 Diamond
     
    题目描述 Description

    由于无敌的WRN在2015年世界英俊帅气男总决选中胜出,EZ总经理Mr.Lin心情好,决定给每位员工发奖金。EZ决定以每个人本年在EZ的贡献为标准来计算他们得到奖金的多少。

    于是Mr.Lin下令召开m方会谈。每位参加会谈的代表提出了自己的意见:“我认为学生a的奖金应该比b高!”Mr.Lin决定要找出一种奖金方案,满足各位代表的意见,且同时使得总奖金数最少。每位学生奖金最少为100元。

    输入描述 Input Description

    第一行两个整数n,m,表示学生总数和代表数;

    以下m行,每行2个整数a,b,表示某个代表认为第a号学生奖金应该比第b号学生高。

    输出描述 Output Description

    若无法找到合法方案,则输出“-1”;否则输出一个数表示最少总奖金。

    样例输入 Sample Input

    2 1

    1 2

    样例输出 Sample Output

    201

    数据范围及提示 Data Size & Hint

    80%的数据满足n<=1000,m<=2000

    100%的数据满足n<=10000,m<=20000

     //T了两个点,我也没办法了,stl,人工栈都过不了

    woc,t的原因是数组开小了....不知为什么codevs报t

    AC代码:

      1 #include<iostream>
      2 #include<cstdio>
      3 using namespace std;
      4 int top=0;
      5 struct sta
      6 {
      7     int sz[100001];
      8     int topp()
      9     {
     10         return sz[top];
     11     }
     12     void push(int x){
     13          sz[++top]=x;
     14     }
     15     void pop(){
     16         if(top>0)
     17         top--;
     18     }
     19     void cl()
     20     {
     21         top=0;
     22     }
     23     int size(){
     24         return top;
     25     }
     26 }stack;
     27 struct node{
     28     int u,v,next;
     29 }edge[100001];
     30 int rd[100001],head[100001],son[100001];int money=0,step=0,monney[100001];
     31 int n,m,num=1;
     32 void add_edge(int x,int y)
     33 {
     34     edge[num].u=x;
     35     edge[num].v=y;
     36     edge[num].next=head[x];
     37     head[x]=num++;
     38 }
     39 void in()
     40 {
     41     scanf("%d%d",&n,&m);
     42     for(int i=1;i<=n;i++)
     43     {
     44         head[i]=-1;
     45         monney[i]=100;
     46     }
     47     int x,y;
     48     for(int i=1;i<=m;i++)
     49     {
     50         scanf("%d%d",&x,&y);
     51         add_edge(y,x);
     52         rd[x]++;
     53     }
     54 }
     55 int sum=0;
     56 void topsort()
     57 {
     58     for(int i=1;i<=n;i++)
     59     {
     60         if(rd[i]==0)
     61         {
     62             stack.push(i);
     63             sum++;
     64         }
     65     }
     66     int step;
     67     while(stack.size()!=0)
     68     {
     69         step=stack.topp();
     70         stack.pop();
     71         for(int i=head[step];i!=-1;i=edge[i].next)
     72         {
     73             
     74             if(monney[edge[i].v]<monney[edge[i].u]+1)
     75             {
     76                 monney[edge[i].v]=monney[edge[i].u]+1;
     77             }
     78             rd[edge[i].v]--;
     79             if(rd[edge[i].v]==0)
     80             {
     81             stack.push(edge[i].v);
     82             sum++;
     83             }
     84         }
     85     }
     86     if(sum!=n)cout<<"-1";
     87     else 
     88     {
     89         for(int i=1;i<=n;i++)
     90         money+=monney[i];
     91         cout<<money<<endl;
     92     }
     93     return;
     94 }
     95 int main()
     96 {
     97     in();
     98     topsort();
     99     return 0;
    100 }
  • 相关阅读:
    多组件共享-vuex
    在子组件中触发事件,传值给父组件-vue
    在父组件中,直接获取子组件数据-vue
    非父子组件通过事件传值-vue
    在父组件中,传值给子组件-vue
    MVVM
    Virtual DOM-渲染函数render -vue
    duilib入门简明教程 -- VS环境配置(2) (转)
    duilib入门简明教程 -- 前言(1) (转)
    【CDockablePane】关于CDockablePane
  • 原文地址:https://www.cnblogs.com/sssy/p/6710388.html
Copyright © 2011-2022 走看看