java 80分 MLE 求助
查看原帖
java 80分 MLE 求助
527347
jasper2021楼主2021/9/23 12:18
import java.util.*;

public class Main {
    static final int mod = 80_112_002;
    public static void main(String[] args) {
        
        Scanner cin = new Scanner(System.in);
        int n = cin.nextInt(), m = cin.nextInt();
        int[] in = new int[n], out = new int[n];
        List<Integer>[] adjs = new List[n];
        for (int i=0; i<n; i++) adjs[i] = new LinkedList<>();
        for (int i=0; i<m; i++) {
            int a = cin.nextInt()-1, b = cin.nextInt()-1;
            in[b]++;
            out[a]++;
            adjs[a].add(b);
        }
        
        // 拓朴排序
        int[] dp = new int[n];
        Deque<Integer> q = new LinkedList<>();
        for (int i=0; i<n; i++) {
            if (in[i]==0) {
                q.offer(i);
                dp[i] = 1;
            }
        }
        
        while (!q.isEmpty()) {
            int u = q.poll();
            for (int v : adjs[u]) {
                dp[v] = (dp[v] + dp[u]) % mod;
                if (--in[v] == 0) {
                    q.offer(v);
                }
            }
        }

        int ans = 0;
        for (int i=0; i<n; i++) {
            if (out[i]==0)
                ans = (ans+dp[i])%mod;
        }
        
        System.out.println(ans);
    }
}
2021/9/23 12:18
加载中...