LeedCode刷题:1557.可以到达所有点的最少点数

给你一个 有向无环图 , n 个节点编号为 0 到 n-1 ,以及一个边数组 edges ,其中 edges[i] = [fromi, toi] 表示一条从点  fromi 到点 toi 的有向边。

找到最小的点集使得从这些点出发能到达图中所有点。题目保证解存在且唯一。

你可以以任意顺序返回这些节点编号。

由分析可知:如果有一条边a->b,那b肯定不在最小的点集中,因为b能到达的a也能到达,且还比b多了a这个可达的点,所以:

只有入度为0的结点,才可以在最小的点集中,且最小的点集中必须包含所有入度为0的点

所以:统计所有入度为0的结点即可

 1 class Solution {
 2     public List<Integer> findSmallestSetOfVertices(int n, List<List<Integer>> edges) {
 3         int []in=new int[n];
 4         for(var e:edges){
 5             in[e.get(1)]++;//统计入度
 6         }
 7         LinkedList<Integer> list=new LinkedList<>();
 8         for(int i=0;i<n;i++){
 9             if(in[i]==0)
10                 list.add(i);//找出入度为0的点
11         }
12         return list;
13     }
14 }
原文地址:https://www.cnblogs.com/nilbook/p/13553124.html