4040 EZ系列之奖金
Posted Nico&11101001
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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,人工栈都过不了
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 }
以上是关于4040 EZ系列之奖金的主要内容,如果未能解决你的问题,请参考以下文章