#P1156. 依赖安装

    ID: 168 传统题 1000ms 128MiB 尝试: 0 已通过: 0难度: 普及+/提高− ← 上一题 下一题 → 随机一题 上传者: 标签 拓扑排序 动态规划 DP 图论 广度优先搜索 BFS 贪心
显示设置

依赖安装

题目描述

一个软件由 nn 个安装包组成,编号 1∼n1\sim n。有 mm 条依赖关系,第 jj 条写成 uj→vju_j\to v_j,表示包 vjv_j 必须在包 uju_j 安装完成之后才能开始安装。

每一轮你可以同时安装任意多个包,只要在这一轮开始时它们的依赖都已经装好了。同一轮里安装的包之间互不影响。

求把所有包装完最少需要多少轮。如果依赖关系里存在环(永远装不完),输出 −1-1。

输入格式

第一行两个整数 n,mn,m。

接下来 mm 行,每行两个整数 uj,vju_j,v_j。

输出格式

一行一个整数,表示最少轮数,或 −1-1。

输入输出样例 #1

输入 #1

5 5
1 2
1 3
2 4
3 4
4 5

输出 #1

4

说明

数据范围

  • 对于 100%100\% 的数据,1≤n,m≤2×1051\le n,m\le 2\times 10^5,1≤uj,vj≤n1\le u_j,v_j\le n,uj≠vju_j\ne v_j。两个包之间可能有多条依赖,也可能没有任何依赖关系。