博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
拓扑排序基础题——排序
阅读量:4451 次
发布时间:2019-06-07

本文共 1332 字,大约阅读时间需要 4 分钟。

题目

由于公司在2013年的销售业务成绩优秀,公司总经理心情大好,决定给每位员工发奖金。公司决定以每个人本年在公司的贡献为标准来计算他们得到奖金的多少。于是总经理下令召开 m 方会谈。每位参加会谈的代表提出了自己的意见:“我认为员工 a 的奖金应该比 b 高!”。总经理决定要找出一种奖金方案,满足各位代表的意见,且同时使得总奖金数最少。每位员工奖金最少为100元。

输入格式
第一行两个整数 n 和 m,表示员工总数和代表数;
接下来有 m 行,每行 2 个整数 a 和 b,表示某个代表认为第 a 号员工奖金应该比第 b 号员工高。
输出格式
若无法找到合理方案,则输出“Poor Xed”;否则输出一个数表示最少总奖金。
样例数据 1
输入
2 1
1 2
输出
201
备注
【数据规模】
80%的数据满足:n<=1000,m<=2000;
100%的数据满足:n<=10000,m<=20000。

很简单的一道拓扑排序

如果A的工资要比B高,那就从B向A连一条边

然后从入度为0的点开始统计

然后用fff来记录每个点的工资,当从点i指向点j的时候f[j]=max(f[j],f[i]+1)f[j]=max(f[j],f[i]+1)f[j]=max(f[j],f[i]+1)

最后的答案就是∑f[i],1&lt;=i&lt;=n∑f[i],1&lt;=i&lt;=nf[i],1<=i<=n

因为直接双层循环要超时,所以只能循环队列来做,但如果m,n到了151^515的时候,就只能用特殊的数据结构来维护入度了

若一次循环中没有入度为0的点了,而还有点未处理,则有环,无解

代码

#include
using namespace std;inline int read(){ char ch=getchar(); int res=0; while(!isdigit(ch)) ch=getchar(); while(isdigit(ch)) res=(res<<3)+(res<<1)+(ch^48),ch=getchar(); return res;}int adj[20005],nxt[20005],to[20005],dep[10005],in[10005],f[10005],n,m,cnt;inline int sum(){ int ans=0; for(int i=1;i<=n;i++) ans+=f[i]; return ans;}inline void addedge(int u,int v){ nxt[++cnt]=adj[u],adj[u]=cnt,to[cnt]=v,in[v]++;}inline void _(int k){ for(int e=adj[k];e;e=nxt[e]) { in[to[e]]--; f[to[e]]=max(f[to[e]],f[k]+1); }}inline bool solve(){ int tot=0; while(tot

最近这CSDN是什么鬼?

转载于:https://www.cnblogs.com/forever-/p/9736067.html

你可能感兴趣的文章
CURRICULUM VITAE
查看>>
菱形缓冲器电路
查看>>
盲点流水账记录
查看>>
08多态
查看>>
Groovy 程序结构
查看>>
使用 WordPress 的导航菜单
查看>>
input只能输入数字和小数点,并且只能保留小数点后两位 - CSDN博客
查看>>
js 不固定传参
查看>>
远程调试UWP遇到新错误Could not generate the root folder for app package ......
查看>>
Knockout.js 数据验证之插件版和无插件版
查看>>
git--windwos下的安装与使用(一)
查看>>
[倍增][最短路-Floyd][dp]
查看>>
SpringAOP用到了什么代理,以及动态代理与静态代理的区别
查看>>
利用STM32CubeMX来生成USB_HID_Mouse工程【添加ADC】(1)
查看>>
【leetcode】Populating Next Right Pointers in Each Node
查看>>
获取请求参数乱码的问题
查看>>
代码实现:判断E盘目录下是否有后缀名为.jpg的文件,如果有,就输出该文件名称...
查看>>
Android客户端测试点
查看>>
Jquery:怎样让子窗体的div显示在父窗体之上
查看>>
01概率
查看>>