题目描述

PIPI开了一个工厂,工厂里面有许许多多的员工。每次要发工资的时候PIPI就开始思考了,如何才能给员工发最少的工资呢?
发工资的原则是这样的: 每个员工的工资都是一个整数,其中基本工资是888元,但是如果 A 是 B的上司,那么A的工资就要比B高。
现在给出员工的数量和员工之间的关系,PIPI想问下胖虎他最少要发多少钱??

输入

输入包含多组测试用例。
对于每一组测试用例,第一行包含两个整数 n (n<=10000)和 m (m<=20000)。表示PIPI工厂里面员工数量以及员工之间的关系数目。
接下来m行每一行包含两个整数 a和 b 。代表 a 是 b的的上司(1<=a,b<=n)。

输出

对于每组测试用例,输出PIPI最少需要发多少工资。如果PIPI没办法发工资,输出-1。

样例输入

2 1
1 2
2 2
1 2
2 1

样例输出

1777
-1

ps:一开始想用动态规划计算工资后来发现无法判断是否有有向环
并查集只能找无向环
想要找有向环有种2途径,拓扑排序和深搜

拓扑排序遍历
可以判断是否有环

#include <stdio.h>
#include <iostream>
#include <stack>
using namespace std;
int n,m;
int indegree[10005];
int salary[10005];
int head[10005];
struct Edge{int to;
int next;
}Edge[20000];
int t;
void add(int u,int v){Edge[t].to=v;
Edge[t].next=head[u];
head[u]=t++;
}
int main(){int i,a,b,Count,ans;stack<int> s;while(scanf("%d %d",&n,&m)!=EOF){t=1;Count=0;ans=0;while(!s.empty()) s.pop();for(i=1;i<=n;i++){indegree[i]=0;salary[i]=0;head[i]=-1;}for(i=0;i<m;i++){scanf("%d %d",&a,&b);add(b,a);indegree[a]++;}for(i=1;i<=n;i++)if(!indegree[i]) s.push(i);while(!s.empty()){int u=s.top();s.pop();Count++;for(i=head[u];i!=-1;i=Edge[i].next){int v=Edge[i].to;salary[v]=salary[v]>salary[u]+1?salary[v]:salary[u]+1;if(!--indegree[v]) s.push(v);}}if(Count<n) {printf("-1\n");continue;}for(i=1;i<=n;i++){ans+=salary[i];}ans+=888*n;printf("%d\n",ans);}
return 0;
}

问题 B: PIPI发工资(拓扑排序遍历)相关推荐

  1. 0x21.搜索 - 树与图的遍历、拓扑排序

    目录 一.树与图的深度优先遍历及树的一些性质 1.树与图的深度优先遍历 2.时间戳 3.树的DFS序(树链剖分前驱知识) 4.树的深度 5.树的重心与sizesizesize 6.图的连通块划分 二. ...

  2. 算法:图(Graph)的遍历、最小生成树和拓扑排序

    背景 不同的数据结构有不同的用途,像:数组.链表.队列.栈多数是用来做为基本的工具使用,二叉树多用来作为已排序元素列表的存储,B 树用在存储中,本文介绍的 Graph 多数是为了解决现实问题(说到底, ...

  3. python 拓扑排序 dfs bfs_图遍历算法之DFS/BFS

    在计算机科学, 图遍历(Tree Traversal,也称图搜索)是一系列图搜索的算法, 是单次访问树结构类型数据(tree data structure)中每个节点以便检查或更新的一系列机制.图遍历 ...

  4. 图——深度优先遍历(DFS)实现有向无环图的逆拓扑排序

    对图的深度遍历与对树的深度遍历思想类似,采用的是递归函数的办法. 如果是非连通图,则DFS遍历所有顶点即可. //Graph 图 //vertex 顶点,用一个int型变量表示//返回有向图G中顶点v ...

  5. 【恋上数据结构与算法 第二季】【04】图-基础实现_遍历_拓扑排序

    持续学习&持续更新中- 学习态度:脚踏实地 [恋上数据结构与算法 第二季][04]图-基础实现_遍历_拓扑排序 图的实现方案 邻接矩阵 邻接表 图的基础接口 顶点.边的定义 图的基础实现 图的 ...

  6. aov建立Java模拟,数据结构之---C语言实现拓扑排序AOV图

    //有向图的拓扑排序 //杨鑫 #include #include #include #define MAX_NAME 3 #define MAX_VERTEX_NUM 20 typedef int ...

  7. 【算法】图(一)拓扑排序的实现 图的邻接表算法 判断是否图G中存在环

    文章目录 用list来表示图,判断是否存在环 邻接表实现拓扑排序 用DFS(邻接矩阵) 来实现拓扑排序. 判断无向图顶点是否全部连通 判断图G中从顶点u到v是否存在简单路径 输出图G中从顶点u到v的所 ...

  8. 【Java7】练习:选角色,挑苹果,员工类,换心脏,斗地主,发工资,客户信息管理软件,开发团队调度系统

    文章目录 1.玩家选择角色:return new 2.人工挑苹果:只一个接口CompareAble 3.员工类接口:implements Comparator 4. 医生帮换心脏:Organ类doWo ...

  9. 拓扑排序基础题——排序

    题目 由于公司在2013年的销售业务成绩优秀,公司总经理心情大好,决定给每位员工发奖金.公司决定以每个人本年在公司的贡献为标准来计算他们得到奖金的多少.于是总经理下令召开 m 方会谈.每位参加会谈的代 ...

  10. 【拓扑排序】【DP】奖金(ssl 1325)

    奖金 ssl 1325 题目大意: 有n个人,某个人要比另外一个人的工资高(工资最低为100,最少多1元),问最少发多少工资 原题: 题目描述 由于无敌的凡凡在2005年世界英俊帅气男总决选中胜出,Y ...

最新文章

  1. 用stm32f10x建立新的工程重要步骤
  2. Struts2、Hibernate、Spring整合所需要的jar包
  3. 用NiceTool在微信浏览器中下载APP
  4. linux ntptime(Network Time Protocol 网络时间协议)
  5. 《你必须知道的261个java语言问题》读书报告——第二弹
  6. Google开源的AR/VR开发库Lullaby
  7. 什么是 SAP enhancement package
  8. java getClass()
  9. (十)深入浅出TCPIP之网络阻塞和非阻塞
  10. Linux openJDK执行javac编译java文件提示command not found
  11. 2152:聪聪可可(点分治)
  12. java sqlite 池_java – SQLite连接池
  13. [ACL2016]Pointing the Unknown Words
  14. python3数据分析面试题--找出出现次数最多的名字并统计次数
  15. HTML怎么在背景中加视频,视频加背景图片 怎样把一个视频嵌入到一个图片中
  16. 怎么搜索一下整个网络的计算机,如何快速查找自己电脑IP地址?
  17. 用格里高利公式求给定精度的PI值 (15分)
  18. mac 部署 ansible 记录
  19. 体育馆场地管理系统1.0-2.0
  20. 同一个excel文件在不同电脑上打印高度不同的原因

热门文章

  1. 随笔小记--微博手动扩容来解决因新热搜“鹿晗关晓彤恋情”引起的down机
  2. (predicted == labels).sum().item()作用
  3. 企业邮箱注册—企业微信邮箱2.0时代正式来临!
  4. LZJ流体质量计算机价格,LZJ-ⅢC型流体质量计算机全解.doc
  5. redis灵魂拷问:聊一聊zset使用
  6. 1118 Birds in Forest (25分)
  7. 戴尔t620服务器装系统2008驱动,dell服务器H310\H710阵列卡驱动
  8. Can not set java.util.Date field *** to java.time.LocalDateTime解决办法
  9. 网卡收到一个数据包的时候,是如何传给应用层的
  10. 利用新浪API实现短网址生成,长网址缩短!